¿Cómo forzar la actualización de un wx.Panel?

Estoy intentando modificar los controles de un Panel, actualizarlo y luego continuar con la ejecución del código. El problema parece ser que el Panel está esperando Inactivo antes de que se actualice. He intentado actualizar, por supuesto, así como GetSizer (). Layout () e incluso envié un evento de cambio de tamaño al marco utilizando el método SendSizeEvent (), pero fue en vano. Estoy en una pérdida aquí, me resulta difícil creer que no hay manera de forzar un rediseño de este panel. Aquí está el código que cambia los controles:

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() 

¿Alguien más ha encontrado algo como esto? ¿Y cómo lo resolviste si es así?

Necesitas llamar al método de Update .

Tenía un StaticBitmap que, de manera similar, no se actualizaría con ninguna de estas técnicas (incluida la Update sugerida en la respuesta aceptada).

Descubrí que llamar a .Hide() y .Show() en el Panel fue suficiente para actualizar la imagen. Sospecho que lo mismo sería cierto si hubiera ejecutado las funciones contra un objeto de nivel inferior como StaticBitmap .

Podría colocar la parte mutable de su panel en los subpaneles, por ejemplo, de esta forma:

 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()