2017-01-26 5 views
0

Ich verwende PyQt5 auf Python 3.5.Qt hat kein Attribut 'AlignCenter'

Ich möchte ein QLabel Widget mit einem zentrierten Text machen. Daher rufe ich die setAlignment Methode mit dem AlignCenter Flag. Hier

ist ein MWE:

import sys 
from PyQt5 import QtWidgets, Qt 

app = QtWidgets.QApplication(sys.argv) 

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

Allerdings bekomme ich folgende Fehlermeldung:

label.setAlignment(Qt.AlignCenter)

AttributeError: module 'PyQt5.Qt' has no attribute 'AlignCenter'

Aber die Qt.AlignCenter sowie andere Ausrichtung Flaggen werden in PyQt's documentation Bezug genommen wird, sowie Qt's documentation.

Was mache ich falsch?

+0

ich diese Frage bin Entsendung zusammen mit der Lösung fand ich. Dies könnte ein wirklich spezifischer Fall sein, und ich bin wahrscheinlich in diese Situation geraten, weil ich die Dokumentation zu schnell gelesen habe. Ich glaube jedoch, dass die Benennung verwirrend ist, und ich möchte Menschen helfen, die in die gleiche Situation geraten könnten. –

Antwort

2

Die AttributeError, die ausgelöst wird, teilt mit, dass PyQt5.Qt kein Attribut namens AlignCenter hat.

Dies kann leicht in Python interaktiver Hilfe bestätigt werden:

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

help eine Reihe von Methoden angezeigt werden, aber eine schnelle Suche nach „Ausrichtung“ Null Ergebnisse.

In der Tat gehört das AlignCenter Flag nicht zum PyQt5.Qt Modul, sondern zu der PyQt5.QtCore.Qt Klasse.

Daher

label.setAlignment(Qt.AlignCenter) 

in

label.setAlignment(QtCore.Qt.AlignCenter) 

zusammen mit dem Recht, den Import ändern, wird die Arbeit machen.


Der folgende Code zeigt, dass dies tatsächlich funktioniert. Ich musste dem Originalcode einige Details hinzufügen, um die Zentrierung sichtbar zu machen.

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

Mit der Ausrichtung auf Kommentar:

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