如何在PyQt向导中显示页面后连接信号。

时间:2016-05-02 05:55:58

标签: python pyqt pyqt4 qwizard

我使用Qt Designer在PyQt4中创建了一个向导。在向导的一个页面上,存在类型为QTextBrowser的'text_Browser'对象。我正在使用函数QTextBrowser.append()根据某些处理为其添加文本。

我希望在显示此页面后执行append功能,而不是将操作(信号)连接到上一页的Next或任何其他按钮。我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

您可以在QTextBrowser中重新实现showEvent

# 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事件可能会导致意外行为。出于这个原因,最好使用信号和插槽,但由于您明确使用信号/插槽,因此showEvent上有一个QEvent版本,并带有公平警告。

避免多次附加文本的一种解决方案是设置实例变量,并在显示小部件后切换值:

# 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程序员来说,信号/插槽机制可能是最直观,最合乎逻辑的。