いくつかの異なるパネルを含むフレームがあり、すべてのパネルが同じ背景画像を取得します。だから私はこの例を見つけました : http://www.blog.pythonlibrary.org/2010/03/18/wxpython-putting-a-background-image-on-a-panel/ )" をこの例から取得し、それを EVT_ERASE_BACKGROUND にバインドします。結果: パネルは背景画像を灰色で再描画します。背景画像の幅は同じですが、パネルよりも高くなっています。ここで、パネルが画像を再描画することがわかります: http://s14.directupload.net/file/d/3030/ej22mwbx_jpg.htm (緑色の下部は私の画像の一部です; 灰色の四角形は私のパネルです)。これらの行も __init__ に追加しました。
import wx
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Click Kick",size=(1124,750),pos=((wx.DisplaySize()[0]-1024)/2,10))
self.startpanel = wx.Panel(self,size=(1024,600))
self.hideallpanels()
self.startpanel.Show()
#...
wx.StaticText(self.startpanel,-1,'Testtext',pos=(120,220))
self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
self.sizer = wx.BoxSizer(wx.VERTICAL)
#self.sizer.Add(self.panelnewgame, 1, wx.EXPAND)
#self.sizer.Add(self.panelloadgame, 1, wx.EXPAND)
self.SetSizer(self.sizer)
#hSizer = wx.BoxSizer(wx.HORIZONTAL)
#hSizer.Add((1,1), 1, wx.EXPAND)
#hSizer.Add(self.sizer, 0, wx.TOP, 100)
#hSizer.Add((1,1), 0, wx.ALL, 75)
#self.SetSizer(hSizer)
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
def hideallpanels(self):
self.startpanel.Hide()
#...
def OnEraseBackground(self, evt):
dc = evt.GetDC()
if not dc:
dc = wx.ClientDC(self)
rect = self.GetUpdateRegion().GetBox()
dc.SetClippingRect(rect)
dc.Clear()
bmp = wx.Bitmap("background.bmp")
dc.DrawBitmap(bmp, 0, 0)
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm()
frame.Show()
app.MainLoop()
しかし、これらの行ではプログラムを開始できません。エラー メッセージは表示されませんが、開始されません。
編集: ウィンドウのサイズが変更されたときに、背景画像 (またはその他のもの) のサイズを変更する必要はありません。ウィンドウは静的であり、サイズ変更されるべきではありません。
Edit2: 上記のコード例を、関連する可能性のあるすべてのコードで更新しました。
Edit3: 申し訳ありませんが、実行されるようになりました。「background.bmp」という名前の背景画像が必要です。これは wx.Panel よりも大きい必要があります (または、wx.Panel のサイズを小さくします) -> パネルが画像を再描画することを確認してください。