2

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

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

4

1 回答 1

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 事件可能会导致意外行为。出于这个原因,最好使用信号和槽,但由于您明确使用信号/槽,这里有一个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 程序员来说,信号/槽机制可能是最直观、最合乎逻辑的。

于 2016-05-02T06:01:25.763 回答