繁体   English   中英

如何对按钮单击pyqt5做出反应

[英]How to react to a button click in pyqt5

因此,我是python编程的新手。 我已经开始在pyqt5中实现UI,并且这里有一个按钮,我想在用户单击它时做出反应。

根据此链接,我应该只写btn.clicked.connect(self.buton_pressed)但是会收到消息“在函数中找不到引用连接”。 (周围的代码在问题的末尾)

所以我在Google上搜索了一下,发现所有内容都应该以这种方式工作。 我只是不明白为什么不这样做。 我发现了这个Stackoverflow问题 ,它也描述了如何做的旧变体。 经过一番摸索之后,我发现它在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对话框来选择文件。

根据这篇文章,我可以在返回函数后直接连接,但是随后我将不得不编写4次,这不是很好。 信号绑定到对象不是变量吗?

感谢您的帮助:)

很难理解您的问题,因为您没有向我们提供有效的示例 ,即,可以使代码“按原样”运行。 像这样:

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吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM