Как переместить виджеты в верхний левый угол вместо правого нижнего
Просто начал возиться с pyqt5 и задавался вопросом, как подтолкнуть виджеты вверх для QVBoxLayout и оставить для QHBoxLayout. В настоящее время с addStretch() он перемещает виджеты вниз / вправо. Я хотел бы избежать использования абсолютного позиционирования.
self.tabColor.layout = QVBoxLayout(self)
self.tabColor.layout.addStretch()
## FOR CONTROL
lbl_control = QLabel(self)
lbl_control.setText("control")
le_control = QLineEdit(self)
hbox_control = QHBoxLayout()
hbox_control.addStretch(1)
hbox_control.addWidget(lbl_control)
hbox_control.addWidget(le_control)
## FOR UNKNOWN
lbl_unknown = QLabel(self)
lbl_unknown.setText("unknown")
le_unknown = QLineEdit(self)
hbox_unknown = QHBoxLayout()
hbox_unknown.addStretch(1)
hbox_unknown.addWidget(lbl_unknown)
hbox_unknown.addWidget(le_unknown)
self.tabColor.layout.addLayout(hbox_control)
self.tabColor.layout.addLayout(hbox_unknown)
self.tabColor.setLayout(self.tabColor.layout)
я использовал self.tabColor.layout.setDirection(3)
, Он размещает горизонтальный макет сверху, но, похоже, переворачивает порядок. Сначала "неизвестно", потом "контрол". Это не имеет большого значения, но мне было интересно, есть ли другие варианты, которые я мог бы попробовать
2 ответа
Первым подходом, который я бы порекомендовал вам, было бы также установить направление вашего макета, поскольку вы пытаетесь выбрать другой путь:
- Попробуйте добавить всегда в начале, вместо добавления виджета, пытаясь вставить его
вместо:
self.layout.addWidget(self.lbl_1)
self.layout.addWidget(self.lbl_2)
self.layout.addWidget(self.lbl_3)
пытаться:
self.layout.insertWidget(0,self.lbl_1)
self.layout.insertWidget(0,self.lbl_2)
self.layout.insertWidget(0,self.lbl_3)
и он будет добавлен в обратном направлении, виджеты, которые уже находятся внутри вашего макета, будут смещены в соответствии с вашим макетом QHBoxLayout или QVBoxLayout.
Изменить порядок вызовов addWidget/Stretch (т.е. добавить растяжку после виджета)