2015-06-09 39 views
5

Mam ten problem wiele razy.Odświeżanie obiektu QWidget

Po zmodyfikowaniu niektórych właściwości QWidget po widget.show() widget nie zostanie zaktualizowany. Przez większość czasu, kliknięcie myszą lub gdy mysz opuszcza lub wchodzi do widżetu, widget zostanie zaktualizowany. Jeśli jednak zostawiam mysz, nie odświeży się sama.

Do tej pory udało mi się z tym uporać, wykonując:

widget.hide() 
widget.show() 

Ale to jest bardzo brudny fix. Czy istnieje lepszy sposób, aby powiedzieć, że python odświeżyć widżet?

Dziękuję.

+0

Próbowałem aktualizacji() na rodzica widget, ale nic nie robił. W rzeczywistości, właśnie uświadomiłem sobie, że update() aktualizuje tylko widget, ale nie jego dzieci. Działanie i aktualizacja() tego widżetu działało! –

+0

Jeśli więc Twój problem został rozwiązany, zaznacz proszę jedną odpowiedź (najlepiej dla ciebie) jako zaakceptowaną (aby oznaczyć to pytanie jako rozwiązane) – Chernobyl

Odpowiedz

6

Aby zaktualizować widget, należy go repaint(), ale nazywając repaint() bezpośrednio nie jest bardzo dobra, więc spróbuj:

widget.update() 

From doc:

Funkcja ta nie powoduje natychmiastowego repaint; zamiast tego zestawia zdarzenie farby do przetworzenia, gdy Qt wraca do głównej pętli zdarzeń . Pozwala to na optymalizację Qt w celu uzyskania większej prędkości i mniejszego migotania niż wywołanie funkcji odświeżania().

Wywołanie aktualizacji() kilka razy zwykle daje w efekcie tylko jedno wywołanie paintEvent() .

Qt zwykle usuwa obszar widgetu przed wywołaniem paintEvent(). Jeśli ustawiony jest atrybut widżetu Qt :: WA_OpaquePaintEvent, to widżet jest odpowiedzialny za pomalowanie wszystkich pikseli za pomocą nieprzezroczystego koloru.

2

Czy już spróbować QWidget.update()

Funkcja ta aktualizuje tylko widoczne części utrzymując niewidocznych części nietknięte.