簡體   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