【问题标题】:PyQt5 : clarifying connect() method in QMessageBox standardButtonsPyQt5:阐明 QMessageBox 标准按钮中的 connect() 方法
【发布时间】:2016-07-21 14:16:23
【问题描述】:

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

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

为了解决这个问题,我尝试了这个:

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


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

如果按下“OK”,则 QMessageBox (Qt5 doc) 的此方法返回 1024,如果按下“Cancel”,则返回 4194304。

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

【问题讨论】:

    标签: python-3.x pyqt5 qmessagebox


    【解决方案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 的默认参数。

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多