如何强制刷新 wx.Panel?
我正在尝试修改一个面板的控件,让它更新,然后继续执行后面的代码。问题是,这个面板似乎在等待空闲状态(Idle)才会自己刷新。我当然试过刷新面板,也用过 GetSizer().Layout(),甚至还用 SendSizeEvent() 方法给框架发送了一个调整大小的事件,但都没有效果。我对此感到很困惑,真不敢相信没有办法强制重新绘制这个面板。以下是我用来修改控件的代码:
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()
有没有人遇到过类似的情况?如果有,你是怎么解决的呢?
4 个回答
2
你可以把面板中可变的部分放在子面板里,比如这样:
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()
4
我有一个 StaticBitmap
,它也不管用这些方法(包括接受的答案中提到的 Update
)都无法更新。
我发现只要在 Panel
上调用 .Hide()
和 .Show()
,就能刷新图片。我猜如果我对一个更底层的对象,比如 StaticBitmap
,执行这些操作,效果也会一样。
13
你需要调用一下 Update
这个方法。