Comment forcer l'actualisation d'un wx.Panel?
Question
J'essaie de modifier les contrôles d'un Panel, de le mettre à jour, puis de continuer à exécuter du code. Le problème semble être que le panneau attend Idle avant de se rafraîchir. J'ai essayé d'actualiser, bien sûr, ainsi que GetSizer (). Layout () et même envoyé un événement de redimensionnement au cadre à l'aide de la méthode SendSizeEvent (), mais en vain. Je suis perdue ici, j'ai du mal à croire qu'il n'y a aucun moyen de forcer une nouvelle rédaction de ce panel. Voici le code qui modifie les contrôles:
def HideButtons(self):
self.newButton.Show(False)
self.openButton.Show(False)
self.exitButton.Show(False)
self.buttonSizer.Detach(self.newButton)
self.buttonSizer.Detach(self.openButton)
self.buttonSizer.Detach(self.exitButton)
loadingLabel = wx.StaticText(self.splashImage, wx.ID_ANY, "Loading...", style=wx.ALIGN_LEFT)
loadingLabel.SetBackgroundColour(wx.WHITE)
self.buttonSizer.Add(loadingLabel)
self.GetSizer().Layout()
self.splashImage.Refresh()
Quelqu'un d'autre a-t-il rencontré quelque chose comme ça? Et comment l'avez-vous résolu si oui?
La solution
Vous devez appeler le Mettre à jour
.
Autres conseils
J'avais un StaticBitmap
qui, de même, ne mettrait à jour aucune de ces techniques (y compris le Update
suggéré dans la réponse acceptée).
J'ai constaté qu'appeler .Hide ()
et .Show ()
sur le panneau
était suffisant pour actualiser l'image. Je soupçonne que la même chose serait vraie si j'avais exécuté les fonctions sur un objet de niveau inférieur tel que StaticBitmap
.
Vous pouvez placer la partie modifiable de votre panneau sur des sous-panneaux, par exemple. comme ceci:
def MakeButtonPanels(self):
self.buttonPanel1 = wx.Panel(self)
self.Add(self.buttonPanel1, 0, wxALL|wxALIGN_LEFT, 5)
# ... make the three buttons and the button sizer on buttonPanel1
self.buttonPanel2 = wx.Panel(self)
self.Add(self.buttonPanel2, 0, wxALL|wxALIGN_LEFT, 5)
# ... make the loading label and its sizer on buttonPanel2
self.buttonPanel2.Show(False) # hide it by default
def HideButtons(self):
self.buttonPanel1.Show(False)
self.buttonPanel2.Show(True)
self.Layout()