【问题标题】:How to react to a button click in pyqt5如何对pyqt5中的按钮单击做出反应
【发布时间】:2016-05-30 21:57:20
【问题描述】:

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

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

所以我用谷歌搜索了一下,我发现它应该就是这样工作的。我只是不明白为什么它没有。我发现了这个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

生成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 函数尚未实现,但它应该打开一个 openFile 对话框以进行文件选择。

根据this post,我可以在返回函数后连接,但是我必须写4次,这不是很好。信号不是绑定到对象而不绑定到变量吗?

感谢您的帮助:)

【问题讨论】:

  • 您能否提供所有代码,以便我们查看该函数的位置以及如何使用它?
  • 它类似于其他问题,问题是我不能简单地将它分配给该函数中的实例变量,因为我多次调用它。只有当它被退回时,我才分配它。添加了该代码。

标签: python connect pyqt5


【解决方案1】:

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

【讨论】:

  • 好的,谢谢你的代码。我试过了,它奏效了。但是 PyCharm 仍然显示错误,我看不出有什么不同。所以我决定走很长的路,从命令行实际尝试我的代码。令人惊讶的是,它奏效了。所以问题是 PyCharm 显示了一个不存在的错误。这是我,来自 eclipse 和 java 编程,从来没有想过可能的事情。有一个 Eclipse 错误总是意味着一个 java 错误。谢谢你的代码。它可能不是解决 pyCharm 问题的方法,但它解决了我的问题,所以我将其标记为正确。
猜你喜欢
  • 2012-10-22
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 2022-06-29
  • 1970-01-01
  • 2015-10-27
相关资源
最近更新 更多