2017-01-26 8 views
0

Я использую PyQt5 на Python 3.5.Qt не имеет атрибута 'AlignCenter'

Я хочу сделать виджет QLabel с центрированным текстом. Поэтому я вызываю метод setAlignment с флагом AlignCenter.

Вот 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: module 'PyQt5.Qt' has no attribute 'AlignCenter'

Но Qt.AlignCenter, а также другие флаги выравнивания, упоминаются в PyQt's documentation, а также Qt's documentation.

Что я делаю неправильно?

+0

Я отправляю этот вопрос наряду с решением я нашел. Это может быть действительно конкретный случай, и я, вероятно, попал в эту ситуацию, потому что я слишком быстро прочитал документацию. Тем не менее, я считаю, что именование путается, и я хочу помочь людям, которые могут попасть в ту же ситуацию. –

ответ

2

Поднятый 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_()) 

Centered text label

С выравниванием закомментирована:

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_()) 

Untouched label