Pregunta

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 a Idle antes de que se actualice. Intenté 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 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:

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 resolvió si es así?

¿Fue útil?

Solución

Debe llamar a Actualizar método.

Otros consejos

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 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 .

Puede colocar la parte mutable de su panel en subpaneles, p. así:

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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top