因此,我是python编程的新手。我已经开始在pyqt5中实现UI,并且那里有一个按钮,我想在用户单击它时做出反应。
根据this Link,我应该简单地编写btn.clicked.connect(self.buton_pressed)
,但是会收到消息“在函数中找不到引用连接”。 (周围的代码在问题的结尾)
所以我在Google上搜索了一下,发现所有内容都应该以这种方式工作。我只是不明白为什么不这样做。我找到了这个Stackoverflow question,它也描述了如何做的旧变体。经过一番摸索之后,我发现它在pyqt5或其他软件包中不再受支持。
我尝试与事件关联的函数:
def __add_button(self, text: str, layout: QLayout):
btn = QPushButton(text, self)
layout.addWidget(btn)
btn.clicked.connect(self.button_pressed)
# TODO: fix this.
return btn
__init__
函数中生成GUI的代码和调用的函数lblhm = QLabel("Hauptmessung", self)
layout.addWidget(lblhm)
self.__hm_b = self.__add_button("Messung öffnen", layout)
self.__hm_config_b = self.__add_button("Configruation öffnen", layout)
lblzm = QLabel("Zusatzmessung", self)
layout.addWidget(lblzm)
self.__zm_b = self.__add_button("Messung öffnen", layout)
self.__zm_config_b = self.__add_button("Configuration öffnen", layout)
button_pressed函数尚未实现,但是应该打开一个openFile对话框来选择文件。
根据this post的说明,我可以在返回函数后立即连接,但随后我必须将其编写4次,这不是很好。信号绑定到对象不是变量吗?
感谢您的帮助:)
最佳答案
很难理解您的问题,因为您没有为我们提供working example,也就是说,可以让代码“按原样”运行。像这样:
from PyQt4 import QtCore, QtGui
class MyWindow(QtGui.QWidget):
def __init__(self):
super().__init__()
layout = QtGui.QVBoxLayout()
self.setLayout(layout)
lblhm = QtGui.QLabel("Hauptmessung", self)
layout.addWidget(lblhm)
self.__hm_b = self.__add_button("Messung öffnen", layout)
self.__hm_config_b = self.__add_button("Configruation öffnen", layout)
lblzm = QtGui.QLabel("Zusatzmessung", self)
layout.addWidget(lblzm)
self.__zm_b = self.__add_button("Messung öffnen", layout)
self.__zm_config_b = self.__add_button("Configuration öffnen", layout)
def button_pressed(self):
print('Button pressed')
def __add_button(self, text: str, layout: QtGui.QLayout):
btn = QtGui.QPushButton(text, self)
layout.addWidget(btn)
btn.clicked.connect(self.button_pressed)
return btn
if __name__== '__main__':
import sys
app = QtGui.QApplication(sys.argv)
wnd = MyWindow()
wnd.show()
sys.exit(app.exec_())
PyQt4
下的这段代码没有问题。它适用于PyQt5
吗?关于python - 如何对按钮单击pyqt5使用react,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37534093/