gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:20:28 25 4
gpt4 key购买 nike

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

我在 QtDesigner 中做了一个快速的图形用户界面,我有一个 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 官方文档中可以很容易地看出:

但即使不阅读任何文档,也很容易自行测试。例如,在下面的脚本中,只需在前两行切换注释,它就会运行:

# 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_())

至于其他要点:根据您目前的知识水平,我会说您可以安全地忽略 connectSlotsByNamepyqtSlot。尽管它们有自己的用途(有关详细信息,请参阅上面的文档),但在 95% 的应用程序中几乎没有真正需要使用它们。

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

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

def change_text(self):
self.ui.testLabel.setText("Button Clicked!")

关于python - PyQt5:如何将 QPushButton 连接到插槽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19966056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com