【问题标题】:Qt has no attribute 'AlignCenter' [duplicate]Qt没有属性'AlignCenter' [重复]
【发布时间】:2017-06-12 03:26:25
【问题描述】:

我在 Python 3.5 上使用 PyQt5。

我想制作一个带有居中文本的QLabel 小部件。因此,我使用AlignCenter 标志调用setAlignment 方法。

这是一个 MWE:

import sys
from PyQt5 import QtWidgets, Qt

app = QtWidgets.QApplication(sys.argv)

label = QtWidgets.QLabel()
label.setAlignment(Qt.AlignCenter)

但是,我收到以下错误:

label.setAlignment(Qt.AlignCenter)

AttributeError: 模块 'PyQt5.Qt' 没有属性 'AlignCenter'

但是Qt.AlignCenter 以及其他对齐标志在PyQt's documentationQt's documentation 中被引用。

我做错了什么?

【问题讨论】:

  • 我将这个问题连同我找到的解决方案一起发布。这可能是一个非常具体的案例,我可能会遇到这种情况,因为我太仓促地阅读了文档。但是,我确实认为命名令人困惑,我想帮助可能遇到相同情况的人。

标签: python pyqt5


【解决方案1】:

引发的AttributeError 表明PyQt5.Qt 没有名为AlignCenter 的属性。

这可以在 Python 的交互式帮助中轻松确认:

>>> from PyQt5 import Qt
>>> help(Qt)

help 会显示一堆方法,但快速搜索“对齐”会得到零个结果。

事实上,AlignCenter 标志不属于PyQt5.Qt 模块,而是属于PyQt5.QtCore.Qt 类。

因此,改变

label.setAlignment(Qt.AlignCenter)

进入

label.setAlignment(QtCore.Qt.AlignCenter)

加上正确的导入就可以了。


以下代码表明这确实有效。我必须在原始代码中添加一些细节以使居中可见。

import sys
from PyQt5 import QtWidgets, QtCore

app = QtWidgets.QApplication(sys.argv)

label = QtWidgets.QLabel()
label.setGeometry(100, 100, 200, 100)
label.setText("Hello world!")
label.setAlignment(QtCore.Qt.AlignCenter)

label.show()

exit(app.exec_())

注释掉对齐方式:

import sys
from PyQt5 import QtWidgets, QtCore

app = QtWidgets.QApplication(sys.argv)

label = QtWidgets.QLabel()
label.setGeometry(100, 100, 200, 100)
label.setText("Hello world!")
# label.setAlignment(QtCore.Qt.AlignCenter)

label.show()

exit(app.exec_())

【讨论】:

  • 将这里作为对任何困惑的 PyQt6 搬运工的评论:QtCore.Qt.AlignmentFlag.AlignCenter 将是 PyQt6 的语法
猜你喜欢
  • 2021-07-02
  • 2013-08-06
  • 1970-01-01
  • 2012-09-15
  • 2012-10-09
  • 2019-11-13
  • 2012-01-25
  • 2021-12-04
  • 2021-05-07
相关资源
最近更新 更多