Как подключить сигнал после отображения страницы в мастере 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.