如何对pyqt5中的按钮单击作出反应

时间:2016-05-30 21:57:20

标签: python connect pyqt5

所以,我是python编程的新手。我已经开始在pyqt5中实现一个用户界面,我有一个按钮,我想在用户点击它时做出反应。

根据this Link,我应该简单地写btn.clicked.connect(self.buton_pressed)但是我收到消息“找不到函数中的参考连接”。 (周围的代码在问题的最后)

所以我用谷歌搜索了一下,我发现它应该只是那样工作。我只是不明白为什么它没有。我发现这个Stackoverflow question也描述了如何做到这一点的旧变种。这也不起作用,经过一些googeling我发现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次,这不是很好。信号不是绑定到对象而不是变量吗?

感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

很难理解你的问题,因为你没有向我们提供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