Wie erzwinge Sie Auffrischen eines wx.Panel?
Frage
Ich versuche, die Kontrollen eines Panels zu ändern, haben sie aktualisieren, dann mit Codeausführung fortsetzen. Das Problem scheint zu sein, dass das Gremium für Idle wartet, bevor sie sich erfrischen. Ich habe refresh natürlich versucht, sowie GetSizer (). Layout () und sogar ein Resize-Ereignis an den Rahmen gesendet, um die SendSizeEvent () Methode verwendet, aber ohne Erfolg. Ich bin ratlos, hier finde ich es schwer zu glauben, dass es keine Möglichkeit gibt, einen Nachzug dieses Gremiums zu erzwingen. Hier ist der Code, der die Kontrollen ändert:
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()
Hat jemand anderes so etwas begegnet? Und wie haben Sie es beheben, wenn so?
Lösung
Andere Tipps
hatte ich einen StaticBitmap
, die in ähnlicher Weise durch eine dieser Techniken nicht (einschließlich der Update
in der akzeptierte Antwort vorgeschlagen) aktualisieren würde.
Ich fand, dass .Hide()
und .Show()
auf dem Panel
Aufruf war genug, um das Bild zu aktualisieren. Ich vermute, dass das gleiche wahr sein würde, wenn ich die Funktionen gegen ein untergeordnetes Objekt wie das StaticBitmap
gelaufen war.
Sie könnten den wandelbaren Teil Ihrer Platte auf Subpanels setzen, z.B. wie folgt aus:
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()