PyQT5 - как я могу получить QApplication для вызова метода после его загрузки? - PullRequest
1 голос
/ 14 марта 2020

Я хотел бы написать в QTextEdit, как только загрузится главное окно, как я могу сделать это эффективно?

Я пытался изменить логическое значение, когда вызывается app.exec(), но так как это главное приложение l oop, оно не работает.

Единственные текущие решения, которые у меня есть (и которых я бы хотел избежать), это сделать таймер или попросить пользователя нажать кнопку, которую я связываю с методом .

Я попытался просмотреть сигналы, отправленные QApplication, QGuiApplication и его родителями, но не смог найти сигнал, связанный с загрузкой главного окна.

1 Ответ

1 голос
/ 14 марта 2020

Если что-то должно произойти, как только [будет] показан виджет, вы можете сделать это методом showEvent():

class MainWindow(QtWidgets.QMainWindow):
    firstShown = False

    def showEvent(self, event):
        super().showEvent(event)
        if not self.firstShown:
            self.firstShown = True
            self.textEdit.setPlainText('hello')

Обратите внимание, что это точно не произойдет, как только как показано окно (для этого есть масса причин, в том числе тот факт, что системному «оконному менеджеру» может потребоваться некоторое время для фактического отображения виджета); В таких случаях достаточно достаточно безопасно, чтобы использовать одиночный QTimer, установленный в 0:

class MainWindow(QtWidgets.QMainWindow):
    firstShown = False

    def showEvent(self, event):
        super().showEvent(event)
        if not self.firstShown:
            self.firstShown = True
            QtCore.QTimer.singleShot(0, self.doStartupEvents)

    def doStartupEvents(self):
        self.textEdit.setPlainText('hello')

Другая теоретическая возможность состоит в том, чтобы делать эти события в paintEvent (гарантируя, что они происходят только в первый раз), но я бы не советовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...