#coding:utf-8 import wx import os class MyApp(wx.App): def __init__(self): super(MyApp,self).__init__() class MyFrame(wx.Frame): def __init__(self,title='test',size=wx.DefaultSize): super(MyFrame,self).__init__(None,wx.ID_ANY,title=title,size=size,style=wx.DEFAULT_FRAME_STYLE^wx.MINIMIZE_BOX) self.Center() #self.SetSize(700,700) #self.SetTitle('aaa') self.InitMenuBar() self.InitStatusBar() self.splitwindow() #self.Bind(wx.EVT_ERASE_BACKGROUND,self.EraseBack) def EraseBack(self,event): self.ParentWindow.SetSashPosition(0) def splitwindow(self): self.ParentWindow=wx.SplitterWindow(self) #創建分割窗口 self.lpanel=wx.Panel(self.ParentWindow) #創建左面板 self.rpanel=wx.Panel(self.ParentWindow) #創建右面板 self.lpanel.SetBackgroundColour('#949449') self.rpanel.SetBackgroundColour(colour='RED') self.ParentWindow.SplitVertically(self.lpanel,self.rpanel,100) self.ParentWindow.SetMinimumPaneSize(50) #設定最小的窗口不能小於50 def InitMenuBar(self): #創建一個menubar menuBar = wx.MenuBar() #創建兩個menu filemenu = wx.Menu() aboutmenu = wx.Menu() #filemenu添加一個menuopen,關聯的ID為wx.ID_OPEN,名字為Open,如果有狀態欄,則狀態欄里顯示‘打開文件’ menuopen = filemenu.Append(wx.ID_OPEN,'Open','打開文件') #filemenu添加一個menu分隔符 filemenu.AppendSeparator() menusave = filemenu.Append(wx.ID_SAVE,'Save','保存當前設置') filemenu.AppendSeparator() menuexit = filemenu.Append(wx.ID_EXIT,'Exit','退出程序') menuBar.Append(filemenu,'File') menuabout = aboutmenu.Append(wx.ID_ABOUT,'Info','Information') menuBar.Append(aboutmenu,'Info') #將menu與函數綁定 self.Bind(wx.EVT_MENU,self.Exit,menuexit) self.Bind(wx.EVT_MENU,self.Info,menuabout) self.Bind(wx.EVT_MENU,self.Open,menuopen) self.Bind(wx.EVT_MENU,self.Save,menusave) self.SetMenuBar(menuBar) def Exit(self,event): print 'aaaa' self.Close() def Open(self,event): self.dirname='' self.filename='' dlg = wx.FileDialog(self,'選擇文件',self.dirname,'','*.csv*',wx.FD_OPEN) if dlg.ShowModal() == wx.ID_OK: self.filename = dlg.GetFilename() self.dirname = dlg.GetDirectory() self.FilePath = os.path.join(self.dirname,self.filename) return self.FilePath def Save(self): #可以將要保存的東西放入本地磁盤 pass def Info(self,event): self.messageinfo='Author:testuser\nDate:2019/5/21\nVersion:0.1' message = wx.MessageDialog(self,self.messageinfo,'INFO',wx.OK) message.ShowModal() message.Destroy() def InitStatusBar(self): #創建狀態欄 statusbar = self.CreateStatusBar() #將狀態欄分割為3個部分 statusbar.SetFieldsCount(3) #分割狀態欄的比例為3:2:1,用負數表示 statusbar.SetStatusWidths([-3,-2,-1]) #每部分狀態欄顯示的值,當鼠標停在menu上時,0號狀態欄會臨時顯示上面menu里的提示信息 statusbar.SetStatusText('1111',0) statusbar.SetStatusText('2222',1) statusbar.SetStatusText('3333',2) if __name__ == '__main__': app = MyApp() frame = MyFrame(title='wx-test',size=(400,300)) frame.Show() app.MainLoop()
運行結果:

在這里做了一些實驗,總結如下:
1.在self.ParentWindow.SplitVertically(self.lpanel,self.rpanel,100)中,100即SashPosition=100,是指左邊的窗口大小。
2.SashPosition=0:平均分割窗口;但是當設定為0的時候沒有效果,要結合EVT_ERASE_BACKGROUND來使用
self.Bind(wx.EVT_ERASE_BACKGROUND,self.EraseBack)
def EraseBack(self,event):
self.ParentWindow.SetSashPosition(0)
3.當使用了self.Bind(wx.EVT_ERASE_BACKGROUND,self.EraseBack)后,self.ParentWindow.SplitVertically(self.lpanel,self.rpanel,100)中100便無效了,會采用EraseBack里設定的值。
