У меня есть QHBoxLayout, к которому я добавляю виджеты, один за другим.
Я чередую, добавляя пользовательский виджет, а не QLabel (повторяющийся).
QHBoxLayout принадлежит QGroupBox.
Тем не менее, я замечаю, что интервал между пользовательским виджетом и QLabel 'нерегулярен', когда в макет добавлено несколько виджетов.
Я намерен центрировать QLabels в промежутке между пользовательскимвиджеты, но QLabels только приближаются к центру при добавлении большего количества виджетов.
На этих снимках экрана показаны два случая.
Требуемый случай (встречается только с большим количеством виджетов в макете),
инежелательный случай (возникает, когда в макете маленькие виджеты).
Как видно из нижнего регистра, QLabels не центрированы между пользовательскими виджетами.Вместо этого они расположены очень далеко вправо!
Что вызывает такое поведение ??
Я считаю, что QGroupBox имеет центрированное (горизонтальное) выравнивание, а QLabels имеют фиксированную ширину 10 (или 20 для '->' QLabel) пикселей (чтобы избежать уродливого наложения).
Любая помощь будет принята с благодарностью!
Спасибо!
Характеристики:
python2.7.1
PyQt4
Windows 7
Создание экземпляра QHBoxLayout абсолютно нормально и похоже на все примеры.
Вот код для заполнения макета.
for i in range (0,len(Reactants)):
self.WidgetHouse.Reaction_Element_Layout.addWidget(eval('self.OverallContainer_Reactants.Reactant_'+str(i)))
# self.WidgetHouse.Reaction_Element_Layout is the QHBoxLayout
# self.OverallContainer_Reactants.Reactant_'+str(i) is a Custom Widget
if i != (len(Reactants)-1):
tmp = QtGui.QLabel('+')
tmp.setFixedWidth(10)
tmp.setAlignment(QtCore.Qt.AlignCenter)
self.WidgetHouse.Reaction_Element_Layout.addWidget(tmp)
else:
tmp = QtGui.QLabel('->')
tmp.setFixedWidth(20)
tmp.setAlignment(QtCore.Qt.AlignCenter)
self.WidgetHouse.Reaction_Element_Layout.addWidget(tmp)
РЕДАКТИРОВАТЬ:
Установка фиксированной ширины QLabels (tmp.setFixedWidth (10)) является источником «правильной привязки».
Однако, если не установить фиксированную ширину, то же пространство будет выделено для QLabels и пользовательских виджетов в макете, что приведет к перекрытию QLabels и пользовательских виджетов.
Идентичен приведенному выше коду, исключая 'tmp.setFixedWidt (10)'
Что я могу сделать, чтобы это не было ужасно?
Могу ли я переместить метки «назад» спереди?
(вызов .raise_ () для всех пользовательских виджетов после того, как все было добавлено в макет, не работает)
(или мне придетсясделать что-то вроде ручного расчета соответствующей ширины надписей на основе количества виджетов в макете? Тьфу!)
ДРУГОЕ РЕДАКТИРОВАНИЕ:
Ход выполнения:
Я не изменяю максимальную / минимальную (или фиксированную) ширину QLabels, но я устанавливаю их выравнивание по центру.
Вместо этого я устанавливаю минимальную ширину пользовательского виджета.
Это исправляеточевидное «перекрытие» (что на самом деле не имело место) и делает метки «более центрированными».
Однако, как вы можете видеть, QLabels все еще не идеально центрированы - слишком далеко вправо.
Если я не установлю выравнивание по центру на QLabels-омОни слишком далеко ушли.
В чем может быть проблема сейчас ??
(я не устанавливаю максимальную ширину на этикетках)
Спасибо всемпомощь пока ребята!