Имам QHBoxLayout, към който добавям приспособления, един по един.
Редувам добавянето на Custom Widget, отколкото QLabel (повтаряне).
QHBoxLayout е собственост на QGroupBox.
Забелязвам обаче, че разстоянието между Custom Widget и QLabel е „неправилно“, когато има малко джаджи, добавени към оформлението.
Възнамерявам QLabels да бъдат центрирани в празнината между персонализираните приспособления, но QLabels се доближават до центъра само когато се добавят още приспособления.
Тези екранни снимки показват двата случая.
Желаният случай (среща се само с много джаджи в оформлението),
и нежеланият случай (среща се, когато в оформлението има малки джаджи).
Както можете да видите в долния случай, QLabels не са центрирани между персонализираните приспособления. Вместо това, те са много вдясно!
На какво се дължи това поведение??
Вярвам, че 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 и персонализирани Widgets в оформлението , което води до припокриване на QLabels и Custom Widgets.
Идентичен с кода по-горе, с изключение на „tmp.setFixedWidt(10)“
Какво мога да направя, за да предотвратя това, което не е напълно ужасно?
Мога ли да преместя етикетите „назад“ отпред?
(Извикването на .raise_() на всички персонализирани джаджи, след като всичко беше добавено към оформлението, не успя работа)
(Или ще трябва да направя нещо като ръчно изчисляване на подходящата ширина на етикетите въз основа на количеството приспособления в оформлението? Мда!)
ДРУГА РЕДАКЦИЯ:
Напредък:
Не променям максималната/минималната (или фиксираната) ширина на QLabels, но задавам подравняването им в центъра.
Вместо това задавам минимална ширина на персонализираната джаджа.
Това коригира очевидното „припокриване“ “ (което всъщност не беше така) и кара етикетите да изглеждат „по-центрирани“.
Въпреки това, както можете да видите, QLabels все още не са идеално центрирани - твърде вдясно.
Ако не задам централно подравняване на QLabels, те са твърде вляво.
Какъв може да е проблема сега??
(Не задавам максимална ширина на етикетите)
Благодаря за цялата помощ досега, момчета!
expanding
, което управлява поведението при преоразмеряване. Може да искате да си поиграете с Qt дизайнера. - person Thomas K   schedule 21.12.2011sizePolicy
- моя грешка. - person Thomas K   schedule 21.12.2011