你如何强制刷新wx.Panel?

时间:2009-08-05 00:40:40

标签: python wxpython refresh panel

我正在尝试修改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()

还有其他人遇到过这样的事吗?你是怎么解决的呢?

3 个答案:

答案 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()