【问题标题】:How to connect signal after the display of a page in PyQt wizard.?在 PyQt 向导中显示页面后如何连接信号。?
【发布时间】:2016-08-26 19:48:16
【问题描述】:

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

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

【问题讨论】:

    标签: python pyqt pyqt4 qwizard


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-31
      • 2013-07-14
      • 2022-10-30
      • 1970-01-01
      • 2019-09-30
      • 2016-11-03
      • 2011-05-08
      • 1970-01-01
      相关资源
      最近更新 更多