10

I am trying to modify the controls of a Panel, have it update, then continue on with code execution. The problem seems to be that the Panel is waiting for Idle before it will refresh itself. I've tried refresh of course as well as GetSizer().Layout() and even sent a resize event to the frame using the SendSizeEvent() method, but to no avail. I'm at a loss here, I find it difficult to believe there is no way to force a redrawing of this panel. Here is the code that changes the controls:

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

Has anybody else encountered anything like this? And how did you resolve it if so?

4

4 に答える 4

13

Updateメソッドを呼び出す必要があります。

于 2009-08-05T07:41:06.147 に答える
4

StaticBitmap同様に、これらの手法のいずれによっても更新されないことがありました(受け入れられた回答で提案されているものを含む)Update

イメージをリフレッシュするには、 and を呼び出すだけで十分で.Hide()あることがわかりました。のような下位レベルのオブジェクトに対して関数を実行した場合も、同じことが当てはまると思います。.Show()PanelStaticBitmap

于 2013-07-13T02:43:02.313 に答える
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()
于 2009-08-05T01:22:19.550 に答える