2009-08-05 2 views
9

Я пытаюсь изменить элементы управления Panel, обновить его, а затем продолжить выполнение кода. Проблема заключается в том, что Группа ждет Idle, прежде чем она обновится. Я попробовал обновление, а также GetSizer(). Layout() и даже отправил событие изменения размера в кадр с помощью метода SendSizeEvent(), но безрезультатно. Я в затруднении здесь, мне трудно поверить, что нет возможности принудительно перерисовать эту панель. Вот код, который изменяет элементы управления:Как вы активируете обновление 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() 

С кем-нибудь сталкивались что-то вроде этого? И как вы это разрешили, если так?

+0

Вы пробовали 'self.Show()'? –

ответ

13

Вам необходимо позвонить по методу Update.

+3

'Update()' само по себе не помогло в моем случае ('StaticBitmap' в 'GridSizer' на' Panel'), но в документах говорилось 'Refresh()' вызвало бы безусловную перерисовку, которую он сделал, когда последовали «Update()» – virtualnobi

+0

На самом деле, просто «Refresh()» работает для меня !? – GreenAsJade

+0

Phoenix изменил структуру ссылок документа. 'Update' [перемещено] (https://wxpython.org/Phoenix/docs/html/wx.Window.html?highlight=wx.window#wx.Window.Update). Это именно то, что я искал. Благодаря! –

1

Вы можете поместить измененную часть вашей панели на подпанели, например. например:

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

Это скрытие и отображение части, которая не выполнялась – Fry

4

У меня был StaticBitmap, который аналогичным образом не обновлялся ни одним из этих методов (в том числе Update, предложенным в принятом ответе).

Было обнаружено, что для обновления изображения было достаточно позвонить .Hide() и .Show() на Panel. Я подозреваю, что то же самое было бы правдой, если бы я выполнял функции против объекта более низкого уровня, такого как StaticBitmap.

Смежные вопросы