[英]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.