我在Python 3.5上使用PyQt5。
我想制作一个QLabel
带有居中文本的小部件。因此,我setAlignment
用AlignCenter
标志调用该方法。
这是MWE:
import sys
from PyQt5 import QtWidgets, Qt
app = QtWidgets.QApplication(sys.argv)
label = QtWidgets.QLabel()
label.setAlignment(Qt.AlignCenter)
Run Code Online (Sandbox Code Playgroud)
但是,出现以下错误:
label.setAlignment(Qt.AlignCenter)
AttributeError:模块“ PyQt5.Qt”没有属性“ AlignCenter”
但是PyQt的文档和Qt的文档中Qt.AlignCenter
都引用了以及其他对齐标记。
我究竟做错了什么?
该AttributeError
所提出告诉PyQt5.Qt
有没有所谓的属性AlignCenter
。
这可以在Python的交互式帮助中轻松确认:
>>> from PyQt5 import Qt
>>> help(Qt)
Run Code Online (Sandbox Code Playgroud)
help
将显示一堆方法,但是快速搜索“对齐”将得到零结果。
实际上,该AlignCenter
标志不属于PyQt5.Qt
模块,而是属于PyQt5.QtCore.Qt
类。
因此,改变
label.setAlignment(Qt.AlignCenter)
Run Code Online (Sandbox Code Playgroud)
进入
label.setAlignment(QtCore.Qt.AlignCenter)
Run Code Online (Sandbox Code Playgroud)
正确的导入将完成这项工作。
下面的代码表明这确实有效。我必须在原始代码中添加一些细节以使居中可见。
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_())
Run Code Online (Sandbox Code Playgroud)
对齐方式被注释掉:
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_())
Run Code Online (Sandbox Code Playgroud)