В 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)