2015-06-09 5 views
5

У меня была эта проблема много раз.Обновление QWidget

Когда я изменяю некоторые свойства QWidget после widget.show(), виджет не будет обновляться. В большинстве случаев щелчок мыши или когда мышь уходит или входит в виджет, виджет будет обновляться. Однако, если я оставлю мышь, она не обновится сама по себе.

До сих пор я не сумел справиться с этим, выполнив:

widget.hide() 
widget.show() 

Но это очень грязно исправить. Есть ли лучший способ сообщить python, чтобы обновить виджет?

спасибо.

+0

Я попробовал update() у родителя виджета, но ничего не делал. На самом деле, я понял, что update() обновляет только виджет, но не его дочерние элементы. Выполнение и обновление() в этом виджете работало! –

+0

Итак, если ваша проблема решена, отметьте, пожалуйста, один ответ (лучший для вас), как принято (отметьте этот вопрос так же, как и его решение) – Chernobyl

ответ

6

Для обновления виджета, вы должны repaint() его, но называть repaint() непосредственно не очень хорошо, так что попробуйте:

widget.update() 

From doc:

Эта функция не вызывает немедленную перерисовку; вместо этого он планирует событие рисования для обработки, когда Qt возвращается к основному циклу событий . Это позволяет Qt оптимизировать для большей скорости и меньше мерцать, чем вызов перерисовать().

Вызов обновления() несколько раз обычно приводит только к одному paintEvent() call.

Qt обычно удаляет область виджета перед вызовом paintEvent(). Если установлен атрибут виджета Qt :: WA_OpaquePaintEvent, виджет отвечает за покраску всех его пикселей непрозрачным цветом.

2

ли вы уже попробовать QWidget.update()

Эта функция обновляет только видимые части сохраняя невидимые части нетронутыми.

Смежные вопросы