我正在尝试修改Panel的控件,让它更新,然后继续执行代码。问题似乎是Panel在刷新之前正在等待空闲。我当然尝试刷新以及GetSizer()。Layout()甚至使用SendSizeEvent()方法向帧发送resize事件,但无济于事。我在这里不知所措,我发现很难相信没有办法强制重新绘制这个面板。以下是更改控件的代码:
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 :(得分:13)
您需要调用Update
方法。
答案 1 :(得分:4)
我有一个StaticBitmap
,同样地,不会通过任何这些技术更新(包括接受的答案中建议的Update
)。
我发现在.Hide()
上调用.Show()
和Panel
足以刷新图像。我怀疑如果我针对像StaticBitmap
这样的低级对象运行函数,情况也是如此。
答案 2 :(得分: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()