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?

Était-ce utile?

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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top