我学习 PyQt5(这对我来说看起来很复杂),我想知道为什么 QMessageBox.Yes(或否)有一些特殊的值(value),对我来说它是 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(如果您单击"is")或 65536(如果您单击“否”),为什么不是 True 或 False?我知道我稍后可以将它与 QMessageBox.Yes 或 QMessageBox.No 进行比较,但我想知道这些魔法值来自何处以及为何使用它们?
因为是和否不是唯一的选择。如果您想要是、否、取消和中止(它们对您的应用程序都有不同的含义)怎么办?你不能用一个 bool 值来表示那些。
因此,通常的做法是使用整数。当然,记住每个整数的含义很烦人,因此将它们存储在命名良好的变量中,以便您的代码保持可读性!
除了它们是 2 的幂(分别为 2^14 和 2^16)这允许使用“按位或”将它们组合成单个整数之外,所使用的特定值没有什么本质上的特殊之处操作,然后使用“按位与”从结果整数中提取。这是将选项标志组合到单个变量中的常用方法,因此您无需在每次添加选项时都向函数/方法添加新参数(在无法完成可选方法参数的语言中很重要)。如果您不知道,您已经在消息框构造函数中使用了按位或组合标志!
我是一名优秀的程序员,十分优秀!