web-dev-qa-db-fra.com

Rafraîchir un QWidget

J'ai eu ce problème beaucoup de fois.

Lorsque je modifie certaines propriétés d'un QWidget après la widget.show(), le widget ne se met pas à jour. La plupart du temps, un clic de souris ou lorsque la souris quitte ou entre dans le widget, le widget sera mis à jour. Cependant, si je laisse la souris, elle ne se rafraîchira pas d'elle-même.

Jusqu'à présent, j'ai réussi à faire face à cela en faisant:

widget.hide()
widget.show()

Mais c'est une solution très sale. Existe-t-il une meilleure façon de dire à python d'actualiser le widget?

Je vous remercie.

12
Olivier Giniaux

Pour mettre à jour le widget, vous devez repaint(), mais appeler repaint() directement n'est pas très bon, alors essayez:

widget.update()

De doc:

Cette fonction ne provoque pas de repeinture immédiate; à la place, il planifie un événement Paint pour le traitement lorsque Qt revient à la boucle d'événement principale. Cela permet à Qt d'optimiser pour plus de vitesse et moins de scintillement qu'un appel à repeindre ().

Appeler plusieurs fois update () entraîne normalement un seul appel paintEvent ().

Qt efface normalement la zone du widget avant l'appel de paintEvent (). Si l'attribut du widget Qt :: WA_OpaquePaintEvent est défini, le widget est responsable de peindre tous ses pixels avec une couleur opaque.

12
Chernobyl

Avez-vous déjà essayé la QWidget.update()

Cette fonction met à jour uniquement les parties visibles en gardant les parties invisibles intactes.

4
Bharadwaj