python - 正确使用 PyQt 信号

标签 python pyqt signals-slots

不久前,我在 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/

相关文章:

python - osx 上的 Tkinter/matplotlib 多个事件窗口

python - dask 和 pandas 数据框中的嵌套 numpy 数组

python - 在线程中的 Qdialog 上调用 exec() 效果不佳

c++ - 如何构建一个通用方法以将不同 Q_PROPERTY 类型的 notifySignal 连接到属性 char * name 中的 void slot(QVariant)?

python - PyQt5:如何将 QPushButton 连接到插槽?

python - 用户定义的通用类型和 collections.abc

python - 在 Pandas 中使用 .notnull() 时正确的语法是什么?

python - 使用 py2exe 隐藏 Python GUI 应用程序的控制台窗口

postgresql - PyQt,如何检查数字数组是否具有特定长度

python - QThread 不发出完成信号