2009-08-05 11 views
9

Panelのコントロールを変更し、更新してからコードの実行を続けようとしています。この問題は、Panel自身がリフレッシュする前にIdleを待っていることが原因と考えられます。私はコースのリフレッシュをGetSizer()と同じように試みました。Layout()はSendSizeEvent()メソッドを使ってフレームにresizeイベントを送りましたが、役に立たなかった。私はここで紛失しています。このパネルを強制的に再描画する方法がないとは信じがたいです。コントロールを変更するコードは次のとおりです。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'は' Panel'の 'GridSizer'にあります)。無条件の再描画を引き起こします。これは '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を含む)によって更新されませんでした。

Panel.Hide().Show()を呼び出しても、画像をリフレッシュするのに十分であることがわかりました。 StaticBitmapのような低レベルのオブジェクトに対して関数を実行した場合、同じことが当てはまると私は思っています。

関連する問題