В Qt у меня есть составной виджет, который состоит из нескольких QLabels, расположенных внутри QBoxLayouts.Когда размер виджета изменяется, я хочу, чтобы текст метки масштабировался, чтобы заполнить область метки, и я реализовал изменение размера текста в resizeEvent.
Это работает, но, похоже, происходит своего рода цикл обратной связи.Составной виджет размещается в главном окне внутри QBoxLayout вместе с некоторыми другими виджетами.Когда главное окно становится меньше, составной виджет сначала сохраняет свой размер, а затем изменяет размеры в направлении правильного размера в несколько шагов (около 10-15).Если высота текста установлена более чем в 0,8 раза выше высоты метки, то при изменении размера текста и содержащего виджета с каждым шагом увеличивается размер до тех пор, пока приложение не выйдет из строя.
Является ли это правильным подходом для достижения этого эффекта?Если это так, в чем может быть проблема с изменением размера?
Ниже приведен код resizeEvent.
def resizeEvent(self, evt):
print("resizeEvent", evt.size().width(), evt.size().height())
QFrame.resizeEvent(self, evt)
dataLabels = self.dataPanels.values()
for label in dataLabels:
font = label.font()
h = label.height()
h2 = h * 0.8
font.setPixelSize(h2)
label.setFont(font)
(с использованием PyQt4 4.8, Qt 4.7.4, Win 7 и OSX 10.6)