wxPython:一曲MFC的挽歌,理想主义的绝唱( 七 )
5.2Aui框架
AdvancedUserInterface , 简称AUI , 是wxPython的子模块 , 使用AUI可以方便地开发出美观、易用的用户界面 。 从2.8.9.2版本之后 , wxPython增加了一个高级通用部件库AdvancedGenericWidgets , 简称AGW库 , AGW库也提供了AUI模块wx.lib.agw.aui , 而wx.aui也依然保留着 。 相比较而言 , 我更喜欢使用wx.lib.agw的AUI框架 。
使用AUI框架可以概括为以下四步:
创建一个布局管理器:mgr=aui.AuiManager()
告诉主窗口由mgr来管理界面:mgr.SetManagedWindow()
添加界面上的各个区域:mgr.AddPane()
更新界面显示:mgr.Update()
下面的代码演示了如何使用AUI布局管理器创建和管理窗口界面 。
importwximportwx.lib.agw.auiasauiclassMainFrame(wx.Frame):"""从wx.Frame派生主窗口类"""id_open=wx.NewIdRef()id_save=wx.NewIdRef()id_quit=wx.NewIdRef()id_help=wx.NewIdRef()id_about=wx.NewIdRef()def__init__(self,parent):"""构造函数"""wx.Frame.__init__(self,parent,style=wx.DEFAULT_FRAME_STYLE)self.SetTitle('菜单、工具栏、状态栏')self.SetIcon(wx.Icon('res/wx.ico'))self.SetBackgroundColour((224,224,224))#设置窗口背景色self.SetSize((640,480))self._init_ui()self.Center()def_init_ui(self):"""初始化界面"""self.tb1=self._create_toolbar()self.tb2=self._create_toolbar()self.tbv=self._create_toolbar('V')p_left=wx.Panel(self,-1)p_center0=wx.Panel(self,-1)p_center1=wx.Panel(self,-1)p_bottom=wx.Panel(self,-1)btn=wx.Button(p_left,-1,'切换',pos=(30,200),size=(100,-1))btn.Bind(wx.EVT_BUTTON,self.on_switch)text0=wx.StaticText(p_center0,-1,'我是第1页',pos=(40,100),size=(200,-1),style=wx.ALIGN_LEFT)text1=wx.StaticText(p_center1,-1,'我是第2页',pos=(40,100),size=(200,-1),style=wx.ALIGN_LEFT)self._mgr=aui.AuiManager()self._mgr.SetManagedWindow(self)self._mgr.AddPane(self.tb1,aui.AuiPaneInfo().Name('ToolBar1').Caption('工具条').ToolbarPane().Top().Row(0).Position(0).Floatable(False))self._mgr.AddPane(self.tb2,aui.AuiPaneInfo().Name('ToolBar2').Caption('工具条').ToolbarPane().Top().Row(0).Position(1).Floatable(True))self._mgr.AddPane(self.tbv,aui.AuiPaneInfo().Name('ToolBarV').Caption('工具条').ToolbarPane().Right().Floatable(True))self._mgr.AddPane(p_left,aui.AuiPaneInfo().Name('LeftPanel').Left().Layer(1).MinSize((200,-1)).Caption('操作区').MinimizeButton(True).MaximizeButton(True).CloseButton(True))self._mgr.AddPane(p_center0,aui.AuiPaneInfo().Name('CenterPanel0').CenterPane().Show())self._mgr.AddPane(p_center1,aui.AuiPaneInfo().Name('CenterPanel1').CenterPane().Hide())self._mgr.AddPane(p_bottom,aui.AuiPaneInfo().Name('BottomPanel').Bottom().MinSize((-1,100)).Caption('消息区').CaptionVisible(False).Resizable(True))self._mgr.Update()def_create_toolbar(self,d='H'):"""创建工具栏"""bmp_open=wx.Bitmap('res/open_mso.png',wx.BITMAP_TYPE_ANY)bmp_save=wx.Bitmap('res/save_mso.png',wx.BITMAP_TYPE_ANY)bmp_help=wx.Bitmap('res/help_mso.png',wx.BITMAP_TYPE_ANY)bmp_about=wx.Bitmap('res/info_mso.png',wx.BITMAP_TYPE_ANY)ifd.upper()in['V','VERTICAL']:tb=aui.AuiToolBar(self,-1,wx.DefaultPosition,wx.DefaultSize,agwStyle=aui.AUI_TB_TEXT|aui.AUI_TB_VERTICAL)else:tb=aui.AuiToolBar(self,-1,wx.DefaultPosition,wx.DefaultSize,agwStyle=aui.AUI_TB_TEXT)tb.SetToolBitmapSize(wx.Size(16,16))tb.AddSimpleTool(self.id_open,'打开',bmp_open,'打开文件')tb.AddSimpleTool(self.id_save,'保存',bmp_save,'保存文件')tb.AddSeparator()tb.AddSimpleTool(self.id_help,'帮助',bmp_help,'帮助')tb.AddSimpleTool(self.id_about,'关于',bmp_about,'关于')tb.Realize()returntbdefon_switch(self,evt):"""切换信息显示窗口"""p0=self._mgr.GetPane('CenterPanel0')p1=self._mgr.GetPane('CenterPanel1')p0.Show(notp0.IsShown())p1.Show(notp1.IsShown())self._mgr.Update()if__name__=='__main__':app=wx.App()frame=MainFrame(None)frame.Show()app.MainLoop()代码运行界面如下图所示 。
文章图片
示例和技巧6.1.相册前文的例子中已经展示了wx.StaticBitmap控件作为图像容器的例子 , 下面的例子用它制作了一个相册 , 点击前翻后翻按钮可在多张照片之间循环切换 。
- 中兴超越中兴:夯实第一曲线 发力第二曲线
- 抖音回首大唐盛世千百年逢君天涯不过一瞬间一曲悠扬沧海复桑田江湖故人念是什么歌 歌曲分享
- Facebook|Facebook 大宕机:远程工作的一曲悲歌
- dns|Facebook 大宕机:远程工作的一曲悲歌
- 独家|腾讯音乐:一曲肝肠断,美股何处觅知音?
- 抖音江上一曲低诵晚风唱出心伤才知情浓鸳鸯离散谁知其中饱尝辛酸谁人能懂是什么歌 歌曲分享