正确使用PyQt信号

3

我之前在C++中使用Qt做了一些工作,现在我正在使用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方法。我可以直接深入EventsPage在Stacked中的内部,并连接self.widget1.continueButton.clicked,但那似乎完全违背了信号和槽的目的。

所以这种方法有意义吗?还是有更好的方法?

1个回答

6
不,这很有道理。把信号想象成在大楼顶上挥手的人们。他们不想穿过街道(太多的楼梯……),所以他们观察其他建筑物上的人在做什么。这样一来,没有人需要关心建筑物内部发生了什么。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接