不久前,我在 Qt for C++ 中做了一些工作;现在我正在使用 PyQt。
我有一个 QStackedWidget 的子类,里面有一个 QWidget 的子类。在 QWidget 中,我想单击一个按钮转到 QStackedWidget 的下一页。我的(简化的)方法如下:
class Stacked(QtGui.QStackedWidget):
def __init__(self, parent=None):
QtGui.QStackedWidget.__init__(self, parent)
self.widget1 = EventsPage()
self.widget1.nextPage.connect(self.nextPage)
self.widget2 = MyWidget()
self.addWidget(self.widget1)
self.addWidget(self.widget2)
def nextPage(self):
self.setCurrentIndex(self.currentIndex() + 1)
class EventsPage(QtGui.QWidget):
nextPage = QtCore.pyqtSignal()
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.continueButton = QtGui.QPushButton('Continue')
self.continueButton.clicked.connect(self.nextPage)
所以,基本上,我将 continueButton clicked
信号连接到 EventsPage nextPage
信号,然后我将其连接到 Stacked 到 nextPage
方法。我可以深入研究 Stacked 中 EventsPage 的内部结构并连接 self.widget1.continueButton.clicked
,但这似乎完全违背了信号和槽的目的。
那么这种做法是否有意义,或者是否有更好的方法?
最佳答案
不,这是完全有道理的。将信号想象成人们从建筑物顶部挥手致意。他们不想过马路(所有那些楼梯......),所以他们会观察其他建筑物上的其他人在做什么。这样一来,没人会关心建筑物内发生的事情。
关于python - 正确使用 PyQt 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2622210/