ApplicationFramework在本节中,我们将创建文件管理器的框架file_hunter,它复制了Unix系统上可用的文件管理器Krusader的外观。如果我们双击拆分器小部件,它会将file_hunter拆分为相同宽度的两个部分。如果我们调整主窗口的大小,也会发生同样的情况。#file_hunter.py#代码中图片素材,https://bugou008.lanzous.com/b00zxubqb密码:bugou008importwximportosimporttimeID_BUTTON=100ID_EXIT=200ID_SPLITTER=300classMyListCtrl(wx.ListCtrl.self):def__init__(ListCtrl.__init__(self,parent,style=wx.LC_REPORT)images=['empty.png','folder.png','py.png','image.png','pdf.png','up16.png']self.InsertColumn(0,'Name')self.InsertColumn(1,'Ext')self.InsertColumn(2,'Size',wx.LIST_FORMAT_RIGHT)self.InsertColumn(3,'Modified')self.SetColumnWidth(0,220)self.SetColumnWidth(1,70)self.SetColumnWidth(2,100)self.SetColumnWidth(3,420)self.il=wx.ImageList(16,16)foriinimages:self.il.添加(wx.Bitmap(i))self.SetImageList(self.il,wx.IMAGE_LIST_SMALL)j=1self.InsertItem(0,'..')self.SetItemImage(0,5)files=os.listdir('.')fori在文件中:(name,ext)=os.path.splitext(i)ex=ext[1:]size=os.path.getsize(i)sec=os.path.getmtime(i)self.InsertItem(j,名字)self.SetItem(j,1,ex)self.SetItem(j,2,str(size)+'B')self.SetItem(j,3,time.strftime('%Y-%m-%d%H:%M',time.localtime(sec)))ifos.path.isdir(i):self.SetItemImage(j,1)elifex=='py':self.SetItemImage(j,2)elifex=='jpg'或ex=='png':self.SetItemImage(j,3)elifex=='pdf':self.SetItemImage(j,4)else:self.SetItemImage(j,0)if(j%2)==0:self.SetItemBackgroundColour(j,'#e6f1f5')j=j+1class示例(wx.Frame):def__init__(self,*args,**kw):super(Example,self).__init__(*args,**kw,size=(900,500))self.InitUI()defInitUI(s精灵):self.splitter=wx.SplitterWindow(self,ID_SPLITTER,style=wx.SP_BORDER)self.splitter.SetMinimumPaneSize(50)p1=MyListCtrl(self.splitter)p2=MyListCtrl(self.splitter)self.splitter.SplitVertically(p1,p2)self.Bind(wx.EVT_SIZE,self.OnSize)self.Bind(wx.EVT_SPLITTER_DCLICK,self.OnDoubleClick,id=ID_SPLITTER)filemenu=wx.Menu()filemenu.Append(ID_EXIT,"E&xit","终止程序")editmenu=wx.Menu()netmenu=wx.Menu()showmenu=wx.Menu()configmenu=wx.Menu()helpmenu=wx.Menu()menuBar=wx.MenuBar()menuBar.追加(filemenu,“&文件”)menuBar.Append(editmenu,“&Edit”)menuBar.Append(netmenu,“&Net”)Append(helpmenu,"&Help")self.SetMenuBar(menuBar)self.Bind(wx.EVT_MENU,self.OnExit,id=ID_EXIT)tb=self.CreateToolBar(wx.TB_HORIZONTAL|wx.NO_BORDER|wx.TB_FLAT)tb.AddTool(10,'Previous',wx.Bitmap('previous.png'),shortHelp='Previous')tb.AddTool(20,'Up',wx.Bitmap('up.png'),shortHelp='Uponedirectory')tb.AddTool(30,'Home',wx.Bitmap('home.png'),shortHelp='Home')tb.AddTool(40,'刷新',wx.Bitmap('refresh.png'),shortHelp='刷新')tb.AddSeparator()tb.AddTool(50,'编辑文本',wx.Bitmap('edit.png'),shortHelp='编辑文本')tb.AddTool(60,'Terminal',wx.Bitmap('terminal.png'),shortHelp='Terminal')tb.AddSeparator()tb.AddTool(70,'帮助',wx.Bitmap('help.png'),shortHelp='显示帮助')tb.Realize()self.sizer2=wx.BoxSizer(wx.HORIZONTAL)button1=wx.Button(self,ID_BUTTON+1,"F3View")button2=wx.Button(self,ID_BUTTON+2,"F4Edit")button3=wx.Button(self,ID_BUTTON+3,"F5Copy")button4=wx.Button(self,ID_BUTTON+4,"F6Move")button5=wx.Button(self,ID_BUTTON+5,"F7Mkdir")button6=wx.Button(self,ID_BUTTON+6,"F8Delete")button7=wx.Button(self,ID_BUTTON+7,"F9Rename")button8=wx.Button(self,ID_EXIT,"F10Quit")self.sizer2.Add(button1,1,wx.EXPAND)self.sizer2.Add(button2,1,wx.EXPAND)self.sizer2.Add(button3,1,wx.EXPAND)self.sizer2.Add(button4,1,wx.EXPAND)self.sizer2.Add(button5,1,wx.EXPAND)self.sizer2.Add(button6,1,wx.EXPAND)self.sizer2.Add(button7,1,wx.EXPAND)self.sizer2.Add(button8,1,wx.EXPAND)self.Bind(wx.EVT_BUTTON,self.OnExit,id=ID_EXIT)self.sizer=wx.BoxSizer(wx.VERTICAL)self.sizer.Add(self.splitter,1,wx.EXPAND)self.sizer.Add(self.sizer2,0,wx.EXPAND)self.SetSizer(self.sizer)#size=wx.DisplaySize()#self.SetSize(大小)sb=self.CreateStatusBar()sb.SetStatusText(os.getcwd())self.SetTitle("文件猎人")self.Center()defOnExit(self,e):self.Close(True)defOnSize(self,e):size=self.GetSize()自我。分离器。SetSashPosition(size.x/2)e.Skip()defOnDoubleClick(self,e):size=self.GetSize()自我。分离器。SetSashPosition(size.x/2)defmain():app=wx.App()ex=Example(None)ex.Show()app.MainLoop()if__name__=='__main__':main()这个例子创建双面板文件管理器的用户界面类MyListCtrl(wx.ListCtrl):def__init__(self,parent):wx.ListCtrl.__init__(self,parent,style=wx.LC_REPORT)应用程序的主要区域wx写的。ListCtrl小部件占用。self.il=wx.ImageList(16,16)foriinimages:self.il.Add(wx.Bitmap(i))self.SetImageList(self.il,wx.IMAGE_LIST_SMALL)列表控件包含图像列表,用于指示文件类型。files=os.listdir('.')foriinfiles:(name,ext)=os.path.splitext(i)ex=ext[1:]size=os.path.getsize(i)sec=os.path.getmtime(i)...我们获取当前工作目录的内容并确定文件扩展名、大小和最后修改时间。如果os.path.isdir(i):self.SetItemImage(j,1)elifex=='py':self.SetItemImage(j,2)elifex=='jpg'或ex=='png':self.SetItemImage(j,3)elifex=='pdf':self.SetItemImage(j,4)else:self.SetItemImage(j,0)根据扩展名为文件选择图像。self.splitter=wx.SplitterWindow(self,ID_SPLITTER,style=wx.SP_BORDER)self.splitter.SetMinimumPaneSize(50)p1=MyListCtrl(self.splitter)p2=MyListCtrl(self.splitter)self.splitter.SplitVertically(p1,p2)我们有两个列表控件由拆分器小部件垂直拆分。menuBar=wx.MenuBar()menuBar.Append(filemenu,"&File")menuBar.Append(editmenu,"&Edit")...我们有一个菜单栏。tb=self.CreateToolBar(wx.TB_HORIZONTAL|wx.NO_BORDER|wx.TB_FLAT)tb.AddTool(10,'Previous',wx.Bitmap('images/previous.png'),shortHelp='Previous')tb.AddTool(20,'Up',wx.Bitmap('images/up.png'),shortHelp='Uponedirectory')...我们有一个toolbar.self.sizer2=wx.BoxSizer(wx.HORIZONTAL)button1=wx.Button(self,ID_BUTTON+1,"F3View")button2=wx.Button(self,ID_BUTTON+2,"F4Edit")button3=wx.Button(self,ID_BUTTON+3,"F5Copy")button4=wx.Button(self,ID_BUTTON+4,"F6Move")...八个按钮放置在水平缩放器中,添加到窗口底部。
