PyQt5:澄清QMessageBox standardButtons中的connect()方法

格里姆

首先,我麻烦的代码范围:

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对象的类是QPushButton。问题是我没有找到属于该类的消息框的属性...我发现了standardButton(),该属性返回“ Ok”和“ Cancel” standardButton类对象,并且它们没有文本属性。

为了解决这个问题,我尝试了以下方法:

def msgbtn(i, extra_arg):
    print(i)
    print(extra_arg)


msg.buttonClicked.connect(lambda: msgbtn(msg.result(), my_arg))

如果按下“确定” ,则QMessageBox的此方法(Qt5 doc)返回1024,如果按下“取消”,则返回4194304。

我可以进一步处理这个问题,但是我想问一问,当我调用msg.buttonClicked.connect(msgbtn)时,有人知道messageBox的哪个对象作为参数传递了吗?

ekhumoro

所述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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章