如何对pyqt5中的按钮点击做出反应
How to react to a button click in pyqt5
所以,我是 python 编程新手。我已经开始在 pyqt5 中实现 UI,我有一个按钮,我想在用户单击它时做出反应。
根据 this Link 我应该简单地写 btn.clicked.connect(self.buton_pressed)
但是我收到消息 "Cannot find reference connect in function"。 (周边代码在题末)
所以我在谷歌上搜索了一下,发现它应该就是这样工作的。我只是不明白为什么没有。我发现这个 也描述了如何做的旧变体。那也不管用,经过一番谷歌搜索后,我发现 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
生成GUI的代码和调用的函数,在__init__
函数
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功能尚未实现,但应该会打开一个文件选择对话框。
根据 的说法,我可以在返回函数后连接,但是我必须写 4 次,这不是很好。 signal不是绑定到对象而不是变量吗?
感谢您的帮助:)
很难理解您的问题,因为您没有向我们提供 working example,即可以 运行 "as is" 的代码和平。像这样:
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 中实现 UI,我有一个按钮,我想在用户单击它时做出反应。
根据 this Link 我应该简单地写 btn.clicked.connect(self.buton_pressed)
但是我收到消息 "Cannot find reference connect in function"。 (周边代码在题末)
所以我在谷歌上搜索了一下,发现它应该就是这样工作的。我只是不明白为什么没有。我发现这个
我尝试连接事件的函数:
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
生成GUI的代码和调用的函数,在__init__
函数
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功能尚未实现,但应该会打开一个文件选择对话框。
根据
感谢您的帮助:)
很难理解您的问题,因为您没有向我们提供 working example,即可以 运行 "as is" 的代码和平。像这样:
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
吗?