У меня есть QHBoxLayout, в который я добавляю виджеты один за другим.
Я чередую, добавляя пользовательский виджет, а не QLabel (повторяющийся).
QHBoxLayout принадлежит QGroupBox.
Однако я заметил, что расстояние между Custom Widget и QLabel является «нерегулярным», когда в макет добавлено несколько виджетов.
Я предполагаю, что QLabels будет центрироваться в промежутке между пользовательскими виджетами, но QLabels приближаются к центру только по мере добавления новых виджетов.
На этих снимках экрана показаны два случая.
Желаемый случай (только при большом количестве виджетов в макете),
и нежелательный случай (возникающий, когда в макете есть маленькие виджеты).
Как вы можете видеть в нижнем регистре, метки QLabel не расположены по центру между пользовательскими виджетами. Вместо этого они очень далеко вправо!
Что вызывает такое поведение ??
Я считаю, что QGroupBox имеет центрированное (горизонтальное) выравнивание, а QLabels имеют фиксированную ширину 10 (или 20 для '->' QLabel) пикселей (чтобы избежать некрасивого перекрытия).
Любая помощь будет принята с благодарностью!
Спасибо!
Спецификации:
python 2.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 и Custom Widgets в макете , что приводит к перекрытию QLabels и Custom Widgets.
Идентично приведенному выше коду, исключая tmp.setFixedWidt (10)
Что я могу сделать, чтобы предотвратить это, что не совсем ужасно?
Могу ли я переместить метки «назад» спереди?
(Вызов .raise_ () для всех настраиваемых виджетов после того, как все было добавлено в макет, не Работа)
(Или мне придется делать что-то вроде ручного расчета подходящей ширины меток в зависимости от количества виджетов в макете? Фу!)
ДРУГОЕ ИЗМЕНЕНИЕ:
Прогресс:
Я не меняю максимальную / минимальную (или фиксированную) ширину QLabels, но я устанавливаю их выравнивание по центру.
Вместо этого я устанавливаю минимальную ширину настраиваемого виджета.
Это устраняет очевидное «перекрытие» '(что на самом деле было не так) и делает ярлыки более центрированными.
Однако, как вы можете видеть, QLabels все еще не идеально отцентрованы - слишком далеко вправо.
Если я не установлю выравнивание по центру на QLabels, они будут слишком далеко влево.
В чем может быть проблема сейчас ??
(Я не устанавливаю максимальную ширину на этикетках)
Спасибо за помощь, ребята!
expanding
, которое управляет изменением размера. Возможно, вы захотите поиграть с ним в Qt Designer. - person Thomas K   schedule 21.12.2011sizePolicy
- моя ошибка. - person Thomas K   schedule 21.12.2011