QMessageBox 的值。Yes/QMessageBox。否

Values of QMessageBox.Yes/QMessageBox.No


我学习 PyQt5(这对我来说看起来很复杂),我想知道为什么 QMessageBox.Yes(or no) 有一些特殊的价值,对我来说它是 16384 。这就是我的意思:

from PyQt5 import QApplication, QWidget, QMessageBox

class App(QWidget):
    def message_box(self):
        resp = QMessageBox.question(self, 'foo', 'bar', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        print(resp)

它打印 16384(如果您单击是)或 65536(如果您单击否),为什么不是 True 或 False? 我知道我可以稍后将它与 QMessageBox.YesQMessageBox.No 进行比较,但我想知道那个神奇的值在哪里从哪里以及为什么使用它们?

如果我们查看 QT 文档,我们可以阅读以下 QMessageBox.question 方法的 return 值:

Returns the identity of the standard button that was clicked.

每个标准按钮的标识都是一个整数,文档中也有指定:

QMessageBox::Yes 0x00004000 QMessageBox::No 0x00010000

如果我们将此十六进制值转换为十进制,我们将得到 16384 和 65536。

why not True or False?

因为这里有更多选项,所以有更多标准按钮(例如确定、打开、保存、取消等)

有关更多信息,您应该阅读 QT 的文档:http://doc.qt.io/qt-5/qmessagebox.html(是的,它适用于 C++,但它也适用于 python 包装器)

因为是和否不是唯一的选择。如果您想要是、否、取消和中止(它们对您的应用程序都有不同的含义)怎么办?你不能用一个布尔值来表示那些。

因此,通常的做法是使用整数。当然,记住每个整数的含义很烦人,因此将它们存储在命名良好的变量中,以便您的代码保持可读性!

除了它们是 2 的幂(分别为 2^14 和 2^16)这允许使用 "bitwise or" 操作,然后使用 "bitwise and" 从结果整数中提取。这是将选项标志组合到单个变量中的常用方法,因此您无需在每次添加选项时都向 function/method 添加新参数(在无法完成可选方法参数的语言中很重要).如果您不知道,您已经在消息框构造函数中使用了按位或组合标志!