如何在 PyQt 向导中显示页面后连接信号?
How to connect signal after the display of a page in PyQt wizard.?
我使用 Qt Designer
在 PyQt4 中创建了一个向导。在向导的一页上,存在类型为 QTextBrowser
的 'text_Browser' 对象。我正在使用函数 QTextBrowser.append()
根据某些处理向其中添加文本。
我希望在显示此页面后执行追加功能,而不是将操作(信号)连接到下一步或上一页上的任何其他按钮。我该怎么做?
您可以在 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 事件可能会导致意外行为。由于这个原因,最好使用信号和槽,但由于您明确 而不是 使用 signal/slots,这里是 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()
另一种解决方案是使用上面提到的 signal/slot 策略,或者重写 __init__
以在子类中自动附加文本。对于 Qt 程序员来说,signal/slot 机制可能是最直观、最合乎逻辑的。
我使用 Qt Designer
在 PyQt4 中创建了一个向导。在向导的一页上,存在类型为 QTextBrowser
的 'text_Browser' 对象。我正在使用函数 QTextBrowser.append()
根据某些处理向其中添加文本。
我希望在显示此页面后执行追加功能,而不是将操作(信号)连接到下一步或上一页上的任何其他按钮。我该怎么做?
您可以在 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 事件可能会导致意外行为。由于这个原因,最好使用信号和槽,但由于您明确 而不是 使用 signal/slots,这里是 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()
另一种解决方案是使用上面提到的 signal/slot 策略,或者重写 __init__
以在子类中自动附加文本。对于 Qt 程序员来说,signal/slot 机制可能是最直观、最合乎逻辑的。