Можете объяснить что должны принимать аргументы функции setAlignment(Union, Qt_Alignment=None, Qt_AlignmentFlag=None):
Зарание спасибо.
Давайте посмотрим на описание метода PyQt5
:
# real signature unknown; restored from __doc__ def setAlignment(self, Union, Qt_Alignment=None, Qt_AlignmentFlag=None): """ setAlignment(self, Union[Qt.Alignment, Qt.AlignmentFlag]) """ pass
Тут показывается что реальная сигнатура, описанная в __doc__
имеет один параметр (это подтверждается при попытке передать больше одного параметра в функцию), который либо Qt.Alignment
, либо Qt.AlignmentFlag
.
Поэтому, параметры Union, Qt_Alignment=None, Qt_AlignmentFlag=None
на самом деле это один параметр.
Дополнительное подтверждение можно увидеть если посмотреть описание этого же метода в документации самой Qt:
void setAlignment(Qt::Alignment)
И тут может возникнуть вопрос:
Почему в PyQt5 этот параметр описывается как Union[Qt.Alignment,
Qt.AlignmentFlag], а в оригинальной документации просто Qt::Alignment?
Для ответа на вопрос нужно смотреть тоже в документации Qt для перечисления Qt::Alignment:
enum Qt::AlignmentFlag flags Qt::Alignment
Qt::Alignment
это набор флагов Qt::AlignmentFlag
: Qt::AlignLeft
, Qt::AlignRight
и т.п., другими словами в Qt::Alignment
может передавать конкретный флаг или сразу несколько: например флаг Qt::AlignCenter
строится из флагов Qt::AlignVCenter
и Qt::AlignHCenter
.
Чтобы составить список флагов их нужно перечислять через битовый или
— оператор |
:
my_align_center = Qt::AlignVCenter | Qt::AlignHCenter
А Union[Qt.Alignment, Qt.AlignmentFlag]
это указание одной из перечисленных вариаций в параметре, что сходится с тем, что выше написал.
Я объяснил почему указывается Union[Qt.Alignment, Qt.AlignmentFlag]
в описании параметра setAlignment
.
Теперь, немного практики.
Ниже привожу пример использования Alignment
:
from PyQt5.QtWidgets import QLabel, QApplication, QGridLayout, QWidget from PyQt5.QtCore import Qt def create_label(alignment): label = QLabel('Test') label.setFixedSize(40, 40) label.setFrameStyle(QLabel.Box) label.setAlignment(alignment) return label app = QApplication([]) layout = QGridLayout() layout.addWidget(create_label(Qt.AlignLeft), 0, 0) layout.addWidget(create_label(Qt.AlignLeft | Qt.AlignBottom), 0, 1) layout.addWidget(create_label(Qt.AlignLeft | Qt.AlignVCenter), 0, 2) layout.addWidget(create_label(Qt.AlignLeft | Qt.AlignTop), 0, 3) layout.addWidget(create_label(Qt.AlignHCenter | Qt.AlignTop), 0, 4) layout.addWidget(create_label(Qt.AlignRight | Qt.AlignVCenter), 0, 5) w = QWidget() w.setLayout(layout) w.show() app.exec()
Скриншот: