#python #python-3.x #pyqt5
#python #python-3.x #pyqt5
Вопрос:
Я пытаюсь уменьшить высоту приложения, когда основное окно выходит из фокуса, но с приведенным ниже кодом ничего подобного не происходит.
class MyApp(QMainWindow):
def __init__(self):
super(MyApp, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.installEventFilter(self)
time_frame_values = [i/30 for i in range(30)]
self.timeFrame = map(lambda x: x**0.5, time_frame_values)
def eventFilter(self, widget, event):
if event.type() == QEvent.FocusOut:
self.on_focus_out()
print("Focus Out!")
return False
def on_focus_out(self):
print("Focus Out!!")
for i in reversed(self.timeFrame):
self.move(QPoint(ScreenSizeObject.width()-self.width()-10, ScreenSizeObject.height()-self.original_height-(i*300)))
self.ui.textDisplay.resize(QSize(self.ui.textDisplay.width(), self.ui.textDisplay.height() (i * 15)))
time.sleep(0.01)
Здесь self.on_focus_out()
будет эффект перехода.
ОЖИДАНИЕ: когда я нажимаю в любом месте главного окна, я хочу self.on_focus_out()
, чтобы оно запускалось.
РЕАЛЬНОСТЬ: никакого ЭФФЕКТА ПЕРЕХОДА не происходит, даже не print('Focus Out!')
печатается символ.
Спасибо за ваши усилия!!
Комментарии:
1. Вам необходимо переопределить ChangeEvent и отслеживать изменения активации / деактивации / состояния окна.
Ответ №1:
Для желаемого поведения, которое вы ищете, измените значение QEvent.FocusOut
на QEvent.WindowDeactivate
, и проблема решена!
Переписывание правильного кода,
class MyApp(QMainWindow):
def __init__(self):
super(MyApp, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.installEventFilter(self)
time_frame_values = [i/30 for i in range(30)]
self.timeFrame = map(lambda x: x**0.5, time_frame_values)
def eventFilter(self, widget, event):
if event.type() == QEvent.WindowDeactivate:
self.on_focus_out()
print("Focus Out!")
return False
def on_focus_out(self):
print("Focus Out!!")
for i in reversed(self.timeFrame):
self.move(QPoint(ScreenSizeObject.width()-self.width()-10, ScreenSizeObject.height()-self.original_height-(i*300)))
self.ui.textDisplay.resize(QSize(self.ui.textDisplay.width(), self.ui.textDisplay.height() (i * 15)))
time.sleep(0.01)