2009-08-05 11 views
9

Sto cercando di modificare i controlli di un Pannello, aggiornarlo, quindi continuare con l'esecuzione del codice. Il problema sembra essere che il Pannello attende Idle prima che si aggiorni automaticamente. Ovviamente ho provato ad aggiornare, oltre a GetSizer(). Layout(), e persino a inviare un evento di ridimensionamento al frame usando il metodo SendSizeEvent(), ma senza alcun risultato. Sono in perdita qui, trovo difficile credere che non ci sia modo di forzare un ridisegno di questo pannello. Ecco il codice che cambia i controlli:Come si forza l'aggiornamento di 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 chiunque altro incontrate qualcosa di simile? E come lo hai risolto, se così fosse?

+0

Hai provato 'self.Show()'? –

risposta

13

È necessario chiamare il metodo Update.

+3

'Update' non ha aiutato nel mio caso (' StaticBitmap's in un 'GridSizer' su un' Pannello'), ma i documenti dicevano 'Aggiorna()' innescherebbe un ridisegno incondizionato - cosa che ha fatto una volta seguito da 'Update()' – virtualnobi

+0

Infatti, proprio 'Refresh()' funziona per me !? – GreenAsJade

+0

Phoenix ha cambiato la struttura del link doc. 'Aggiornamento' [spostato] (https://wxpython.org/Phoenix/docs/html/wx.Window.html?highlight=wx.window#wx.Window.Update). Questo è esattamente quello che stavo cercando. Grazie! –

1

È possibile inserire la parte mutabile del pannello sui pannelli secondari, ad es. in questo modo:

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

E 'il nascondiglio e mostra la parte che non era in esecuzione – Fry

4

Avevo uno StaticBitmap che, analogamente, non si aggiornava con nessuna di queste tecniche (incluso lo Update suggerito nella risposta accettata).

Ho trovato che chiamare .Hide() e .Show() su Panel era sufficiente per aggiornare l'immagine. Sospetto che lo stesso sarebbe vero se avessi eseguito le funzioni su un oggetto di livello inferiore come lo StaticBitmap.

Problemi correlati