PyQt5:阐明 QMessageBox standardButtons 中的 connect() 方法
PyQt5 : clarifying connect() method in QMessageBox standardButtons
首先,我麻烦的代码范围:
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)
所以在这一点上,我在字符串中返回了 "Ok" 或 "Cancel",这很好。但是,我想向这个连接函数 (msgbtn) 添加一个额外的参数。我在 msnbtn 中执行了命令 "type(i)" 并且 i-object 的 class 是 QPushButton。问题是我没有找到属于这个 class 的消息框的属性...我找到了 returns "Ok" 和 "Cancel" 的 standardButton() standardButton class 个对象,它们没有文本属性。
为了解决这个问题,我尝试了这个:
def msgbtn(i, extra_arg):
print(i)
print(extra_arg)
msg.buttonClicked.connect(lambda: msgbtn(msg.result(), my_arg))
QMessageBox 的此方法 (Qt5 doc) returns 1024 如果 "OK" 被按下,4194304 如果 "Cancel" 被按下。
我可以进一步处理这个问题,但我问你有人知道当我调用 msg.buttonClicked.connect(msgbtn)[=24= 时传递的消息框的哪个对象作为参数]?
buttonClicked signal sends the button that was clicked. The documentation shows the parameter is of type QAbstractButton, which is an abstract base-class that is inherited by the QPushButton class.
您的示例代码可以这样修改:
def msgbtn(button, arg):
print(button.text())
print(arg)
msg.buttonClicked.connect(lambda button, arg=my_arg: msgbtn(button, arg))
这会将 my_arg
的当前值缓存为 lambda
的默认参数。
首先,我麻烦的代码范围:
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)
所以在这一点上,我在字符串中返回了 "Ok" 或 "Cancel",这很好。但是,我想向这个连接函数 (msgbtn) 添加一个额外的参数。我在 msnbtn 中执行了命令 "type(i)" 并且 i-object 的 class 是 QPushButton。问题是我没有找到属于这个 class 的消息框的属性...我找到了 returns "Ok" 和 "Cancel" 的 standardButton() standardButton class 个对象,它们没有文本属性。
为了解决这个问题,我尝试了这个:
def msgbtn(i, extra_arg):
print(i)
print(extra_arg)
msg.buttonClicked.connect(lambda: msgbtn(msg.result(), my_arg))
QMessageBox 的此方法 (Qt5 doc) returns 1024 如果 "OK" 被按下,4194304 如果 "Cancel" 被按下。
我可以进一步处理这个问题,但我问你有人知道当我调用 msg.buttonClicked.connect(msgbtn)[=24= 时传递的消息框的哪个对象作为参数]?
buttonClicked signal sends the button that was clicked. The documentation shows the parameter is of type QAbstractButton, which is an abstract base-class that is inherited by the QPushButton class.
您的示例代码可以这样修改:
def msgbtn(button, arg):
print(button.text())
print(arg)
msg.buttonClicked.connect(lambda button, arg=my_arg: msgbtn(button, arg))
这会将 my_arg
的当前值缓存为 lambda
的默认参数。