2015-06-09 11 views
5

Ho riscontrato questo problema un sacco di volte.Aggiornamento di QWidget

Quando modifico alcune proprietà di un QWidget dopo il widget.show(), il widget non si aggiornerà. Il più delle volte, un clic del mouse o quando il mouse lascia o entra nel widget, il widget verrà aggiornato. Tuttavia, se lascio il mouse, non si aggiornerà da solo.

Fino ad ora sono riuscito a fare con questo facendo:

widget.hide() 
widget.show() 

ma questa è una correzione molto sporco. C'è un modo migliore per dire python per aggiornare il widget?

Grazie.

+0

Ho provato update() su un genitore del widget ma non stava facendo nulla. In effetti, ho capito che update() aggiorna solo il widget ma non i suoi figli. Fare e aggiornare() su questo widget ha funzionato! –

+0

Quindi, se il problema è risolto, contrassegna per favore una risposta (la migliore per te) come accettata (per contrassegnare anche questa domanda come risolta) – Chernobyl

risposta

6

Per aggiornare il widget, si dovrebbe repaint(), ma chiamando direttamente repaint() non è molto buona, in modo da provare:

widget.update() 

From doc:

Questa funzione non causa un ridisegno immediato; invece, pianifica un evento paint per l'elaborazione quando Qt torna al ciclo di eventi principale . Ciò consente a Qt di ottimizzare per una maggiore velocità e meno sfarfallio dello rispetto a una chiamata a repaint().

La chiamata all'aggiornamento() più volte normalmente corrisponde a una sola chiamata paintEvent().

Qt normalmente cancella l'area del widget prima della chiamata paintEvent(). Se è impostato l'attributo del widget Qt :: WA_OpaquePaintEvent, il widget è responsabile della colorazione di tutti i pixel con un colore opaco.

2

Hai già provare il QWidget.update()

Questa funzione aggiorna solo le parti visibili mantenendo le parti invisibili intatta.