2009-08-05 21 views
9

Estoy tratando de modificar los controles de un Panel, hacer que se actualice y luego continuar con la ejecución del código. El problema parece ser que el Panel está esperando el reposo antes de que se renueve solo. Intenté actualizar el curso, así como GetSizer(). Layout() e incluso envié un evento de cambio de tamaño al fotograma utilizando el método SendSizeEvent(), pero fue en vano. Estoy perdido aquí, me resulta difícil creer que no hay forma de forzar un rediseño de este panel. Aquí está el código que cambia los controles:¿Cómo fuerza la actualización de un wx.Panel?

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

¿Ha encontrado a nadie más algo como esto? ¿Y cómo lo resolviste si es así?

+0

¿Has probado 'self.Show()'? –

Respuesta

13

Debe llamar al método Update.

+3

'Update()' solo no ayudó en mi caso ('StaticBitmap's en' GridSizer' en un 'Panel'), pero los documentos dijeron' Refresh() ' desencadenaría un repintado incondicional, lo cual sucedió cuando fue seguido por 'Update()' – virtualnobi

+0

De hecho, solo 'Refresh()' funciona para mí !? – GreenAsJade

+0

Phoenix cambió la estructura de enlace de documento. 'Update' [se ha movido] (https://wxpython.org/Phoenix/docs/html/wx.Window.html?highlight=wx.window#wx.Window.Update). Esto es exactamente lo que estaba buscando. ¡Gracias! –

1

Puede colocar la parte mutable de su panel en subpaneles, p. de esta manera:

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

Es la parte oculta y que muestra que no se estaba ejecutando – Fry

4

Tuve un StaticBitmap que, de forma similar, no actualizaría por ninguna de estas técnicas (incluido el Update sugerido en la respuesta aceptada).

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

Cuestiones relacionadas