首先,我麻烦的代码范围:
from PyQt5 import QtWidgets, QtCore
# I found this function on the web:
def msgbtn(i):
"""
This function works, and returns "Ok" or "Cancel" (string object).
"""
print("Button pressed is:", i.text())
return i.text()
# Create a basic message box
msg = QtWidgets.QMessageBox()
msg.setText("Try")
msg.setWindowTitle("My Title")
# Add the standard buttons "Ok" and "Cancel"
msg.setStandardButtons(QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel)
# Here, I tried to connect a function without argument, it works.
msg.buttonClicked.connect(msgbtn)
所以在这一点上,我已经"好了"或"取消"以字符串形式返回,这很好。但是,我想为此连接函数(msgbtn)添加一个额外的参数。我做了命令"输入(i)"在msnbtn和i-object的类中是QPushButton。问题是我没有找到属于这个类的消息框的属性...我找到了standardButton(),它返回" Ok"和"取消" standardButton类对象,它们没有文本属性。
要解决这个问题,我试过了:
def msgbtn(i, extra_arg):
print(i)
print(extra_arg)
msg.buttonClicked.connect(lambda: msgbtn(msg.result(), my_arg))
QMessageBox(Qt5 doc)的此方法返回1024,如果" OK"被按下并且4194304如果"取消"被按下了。
我可以更进一步处理这个问题,但是当我调用 msg.buttonClicked.connect(msgbtn)时,有人知道有人知道messageBox的哪个对象作为参数传递?
答案 0 :(得分:1)
buttonClicked信号发送被点击的按钮。该文档显示参数的类型为QAbstractButton,它是QPushButton类继承的抽象基类。
您的示例代码可以像这样修复:
def msgbtn(button, arg):
print(button.text())
print(arg)
msg.buttonClicked.connect(lambda button, arg=my_arg: msgbtn(button, arg))
这会将my_arg
的当前值缓存为lambda
的默认参数。