Python QMessageBox.Yes/QMessageBox.No的值

Python QMessageBox.Yes/QMessageBox.No的值,python,pyqt5,qmessagebox,Python,Pyqt5,Qmessagebox,我学习了PyQt5(对我来说它看起来很复杂),我想知道为什么QMessageBox。是的(或否)有一些特殊的价值,对我来说它是16384。这就是我的意思: from PyQt5 import QApplication, QWidget, QMessageBox class App(QWidget): def message_box(self): resp = QMessageBox.question(self, 'foo', 'bar', QMessageBox.Yes


我学习了PyQt5(对我来说它看起来很复杂),我想知道为什么QMessageBox。是的(或否)有一些特殊的价值,对我来说它是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(如果单击否),为什么不是真或假?
我知道我可以稍后将其与QMessageBox.Yes或QMessageBox.No进行比较,但我想知道这些神奇的值来自何处以及为什么使用它们?

如果我们查看QT文档,我们可以阅读以下关于
QMessageBox.question
方法返回值的内容:

返回单击的标准按钮的标识

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

QMessageBox::是0x00004000
QMessageBox::否0x00010000

如果我们把这个十六进制值转换成小数,我们得到16384和65536

为什么不正确或错误

因为这里有更多的选项,所以有更多的标准按钮(例如Ok、Open、Save、Cancel等)


对于更多信息,您应该阅读Qt文档(是的,它是C++的,但它也适用于Python包装)

,因为“是”和“不是”不是唯一的选项。如果您想要yes、no、cancel和abort(它们对您的应用程序有不同的含义),该怎么办?不能用一个布尔值表示这些值

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


所使用的特定值本身没有什么特别之处,只是它们是2的幂(分别为2^14和2^16),允许使用“按位或”运算将它们组合成单个整数,然后使用“按位和”运算从结果整数中提取。这是一种将选项标志组合到单个变量中的常用方法,因此无需在每次添加选项时向函数/方法添加新参数(在无法执行可选方法参数的语言中很重要)。如果您不知道,您已经使用按位或组合消息框构造函数中的标志了

花上几分钟的时间咨询一下,很快就会发现一切。非常感谢你的回答!