Как подключить сигнал после отображения страницы в мастере PyQt.?

Я создал Мастер в PyQt4, используя Qt Designer, На одной странице мастера существует объект типа text_Browser типа QTextBrowser, Я использую функцию QTextBrowser.append() добавить текст к нему на основе некоторой обработки.

Я хочу выполнить функцию добавления после отображения этой страницы, а не связывать действие (сигнал) со следующей или любыми другими кнопками на предыдущей странице. Как мне это сделать?

1 ответ

Вы можете переопределить showEvent в QTextBrowser.

# from PySide import QtGui
from PyQt4 import QtGui

class CustomTextBrowser(QtGui.QTextBrowser):
    '''Reimplment show event to append text'''

    def showEvent(self, event):
        # do stuff here 
        #self.append('This random text string ')
        event.accept()

Пожалуйста, обратите внимание, что это будет добавляться к строке QTextBrowser каждый раз, когда виджет отображается, а это означает, что другие события Qt, которые переключают видимость этого виджета, могут вызвать непредвиденное поведение. Использование сигналов и слотов является предпочтительным по этой причине, но, поскольку вы явно не используете сигнал / слоты, вот версия QEvent на showEvent с честным предупреждением.

Одним из решений, позволяющих избежать добавления текста несколько раз, является установка переменной экземпляра и переключение значения после отображения виджета:

# from PySide import QtGui
from PyQt4 import QtGui

class CustomTextBrowser(QtGui.QTextBrowser):
    '''Reimplment show event to append text'''

    def __init__(self, *args, **kwds):
        super(CustomTextBrowser, self).__init__(*args, **kwds)

        self._loaded = False

    def showEvent(self, event):
        if not self._loaded:
            # do stuff here 
            #self.append('This random text string ')
            self._loaded = True
        event.accept() 

Другое решение - использовать стратегию сигнал / слот, как упомянуто выше, или переопределить __init__ автоматически добавлять текст в ваш подкласс. Вероятно, механизм сигнал / слот является наиболее интуитивным и логичным для программистов Qt.

Другие вопросы по тегам