python - 如何将多个 QPushButtons 连接到一个方法?
问题描述
在这个应用程序中,我想将每个按钮连接到一种方法,该方法只显示按下按钮的文本。我认为我可以将按钮本身作为参数传递给方法,而不是为三个不同的按钮编写三种不同的方法:
import sys
from PyQt5 import QtWidgets as qtw
class MyWindow(qtw.QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.initUI()
def initUI(self):
grid = qtw.QGridLayout()
self.setLayout(grid)
self.btn_1 = qtw.QPushButton('1')
self.btn_2 = qtw.QPushButton('2')
self.btn_3 = qtw.QPushButton('3')
self.btn_1.clicked.connect(self.print_to_console(self.btn_1))
self.btn_2.clicked.connect(self.print_to_console(self.btn_2))
self.btn_3.clicked.connect(self.print_to_console(self.btn_3))
grid.addWidget(self.btn_1)
grid.addWidget(self.btn_2)
grid.addWidget(self.btn_3)
self.show()
def print_to_console(self, obj):
obj = qtw.QPushButton()
print(obj.text())
def main():
app = qtw.QApplication(sys.argv)
ex = MyWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
但我在这里得到这个错误信息:
Traceback (most recent call last):
File "c:\Users\fibi\Documents\PyQt5\nine buttons\NineButtons - Kopie.py", line 48, in <module> main()
File "c:\Users\fibi\Documents\PyQt5\nine buttons\NineButtons - Kopie.py", line 43, in main ex = MyWindow()
File "c:\Users\fibi\Documents\PyQt5\nine buttons\NineButtons - Kopie.py", line 10, in __init__self.initUI()
File "c:\Users\fibi\Documents\PyQt5\nine buttons\NineButtons - Kopie.py", line 22, in initUI
self.btn_1.clicked.connect(self.print_to_console(self.btn_1))
TypeError: argument 1 has unexpected type 'NoneType'
有人知道我做错了什么吗?感谢您的帮助。
解决方案
所有方法默认返回None
。您需要将一个可调用对象传递给connect
,以便在按下按钮时调用该方法。
所以进行以下更改(删除()
after self.print_to_console
):
self.btn_1.clicked.connect(self.print_to_console)
self.btn_2.clicked.connect(self.print_to_console)
self.btn_3.clicked.connect(self.print_to_console)
您可以使用 获取发送信号的小部件QObject.sender()
。所以你print_to_console
可能是
def print_to_console(self):
obj = self.sender()
print(obj.text())
推荐阅读
- python - 如何在 Alfred Workflows 中将参数传递给 Python 脚本
- ssh - 建议重新启动后无法通过 ssh 连接到计算引擎
- c++ - “无法开始调试。没有进程与此对象关联。” - 在 Visual Studio Code 中使用 GDB 和 openOCD 的 STM32F4
- awk - AWK,用引号括起来的逗号分隔字段
- java - JavaFX FXML 应用程序不会运行
- azure - 通过powershell意外删除了Azure Multi-factor Auth客户端服务主体,如何恢复?
- ruby-on-rails - rails bootstrap modal没有关闭
- java - 使用休眠的存储过程
- go - How to generate entropy by myself? - RSA Golang
- javascript - 如何使用 svg 矩阵函数通过正确的变换数学来缩放 svg