Проблема с событием Focus out

#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)