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

2024-04-27

好吧,几乎所有教程/可理解的用人类语言编写的文档都是针对 PyQt4 的。但是,PyQt5 改变了整个“将按钮连接到插槽”的工作方式,但我仍然不知道如何做到这一点。

我在 QtDesigner 中做了一个快速 gui,并且有一个 QPushButton 和一个标签。当我单击按钮时,我希望标签上的文本发生变化。在QtDesigner中的C++中,很容易将两者连接起来。但我必须用 python 来编写它。

我使用 pyuic5 将 .ui 文件转换为 .py 文件。在那里,在 Ui_MainWindow 类中,我可以看到 setupUi 方法,它初始化 self.button 如下

self.testButton = QtWidgets.QPushButton(self.centralWidget)
self.testButton.setObjectName("newGame")

然后,在该方法的最后,

QtCore.QMetaObject.connectSlotsByName(MainWindow)

被称为,但是,说实话,我不知道它是做什么的以及它连接到哪里。

在继承自 QMainWindow 的主类中,我编写了以下方法

@pyqtSlot(name='change')
def change_text(self):
    self.ui.testLabel.setText("Button Clicked!")

我不知道如何将按钮信号连接到该插槽。在 pyqt4 中,我可以通过执行 button.clicked.connect(self.change_text) 手动设置它,但正如我发现的,PyQt5 废弃并放弃了这种简单的设置。

请问有人可以帮我解决这个问题吗?


我不知道你从哪里得到“PyQt5 改变了整个‘将按钮连接到插槽’的工作方式”的想法,但这是完全错误的。没有这样的变化,从 PyQt 官方文档中可以很容易地看出:

  • PyQt4 信号和槽文档 http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html
  • PyQt5 信号和槽文档 http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html

但即使不阅读任何文档,您也可以轻松进行测试。例如,在下面的脚本中,只需切换前两行的注释,它就会以同样的方式运行:

# from PyQt5.QtWidgets import (
from PyQt4.QtGui import (
    QApplication, QWidget, QVBoxLayout, QPushButton, QLabel,
    )

class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.button = QPushButton('Test', self)
        self.label = QLabel(self)
        self.button.clicked.connect(self.handleButton)
        layout = QVBoxLayout(self)
        layout.addWidget(self.label)
        layout.addWidget(self.button)

    def handleButton(self):
        self.label.setText('Button Clicked!')

if __name__ == '__main__':

    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

至于其他点:以你目前的知识水平,我想说你可以放心地忽略connectSlotsByName and pyqtSlot。尽管它们有其用途(有关详细信息,请参阅上面的文档),但在 95% 的应用程序中很少真正需要使用它们。

对于您的具体情况,语法很简单:

    self.testButton.clicked.connect(self.change_text)
    ...

def change_text(self):
    self.ui.testLabel.setText("Button Clicked!")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyQt5:如何将 QPushButton 连接到插槽? 的相关文章

随机推荐