MyPy 抱怨 Qt.AlignmentFlag

Posted

技术标签:

【中文标题】MyPy 抱怨 Qt.AlignmentFlag【英文标题】:MyPy complains about Qt.AlignmentFlag 【发布时间】:2022-01-10 15:08:04 【问题描述】:

当我升级到 PySide6 6.2.2 时,MyPy 开始抱怨 Qt.AlignmentFlag。这是一个小例子:

from PySide6.QtGui import Qt
from PySide6.QtWidgets import QLabel, QApplication

app = QApplication()
label = QLabel("Hello, World!")
label.setAlignment(Qt.AlignCenter)
label.show()

app.exec()

这仍然运行良好,但 MyPy 抱怨:

$ mypy foo.py 
foo.py:6: error: Argument 1 to "setAlignment" of "QLabel" has incompatible type "AlignmentFlag"; expected "Alignment"
Found 1 error in 1 file (checked 1 source file)
$

好的,我尝试将AlignmentFlag 转换为Alignment

from PySide6.QtGui import Qt
from PySide6.QtWidgets import QLabel, QApplication

app = QApplication()
label = QLabel("Hello, World!")
label.setAlignment(Qt.Alignment(Qt.AlignCenter))
label.show()

app.exec()

再次,运行良好,但 MyPy 现在抱怨构造函数。

$ mypy foo.py 
foo.py:6: error: Too many arguments for "Alignment"
Found 1 error in 1 file (checked 1 source file)
$

谁能解释一下如何使用Qt.AlignmentQt.AlignmentFlag

【问题讨论】:

【参考方案1】:

在我找到更好的选择之前,我会假设有人弄乱了 PySide6 6.2.2 中的类型提示,我会告诉 MyPy 忽略它。

from PySide6.QtGui import Qt
from PySide6.QtWidgets import QLabel, QApplication

app = QApplication()
label = QLabel("Hello, World!")
label.setAlignment(Qt.AlignCenter)  # type: ignore
label.show()

app.exec()

【讨论】:

以上是关于MyPy 抱怨 Qt.AlignmentFlag的主要内容,如果未能解决你的问题,请参考以下文章

为啥 mypy 认为缺少库导入?

对于使用 `type()` 构造的类型,mypy“作为类型无效”

如何让 Mypy 在 Callable 中识别类的协议成员资格?

使用 mypy 检查类型时有啥问题

如何在PyCharm中运行mypy插件以检查键入的代码?

mypy:如何最好地处理 random.choice