me的保存路径怎么查看,ME软件使用

首页 > 经验 > 作者:YD1662022-11-07 10:50:33

5.2 Aui框架

Advanced User Interface,简称AUI,是wxPython的子模块,使用AUI可以方便地开发出美观、易用的用户界面。从2.8.9.2版本之后,wxPython增加了一个高级通用部件库Advanced Generic Widgets,简称AGW库, AGW库也提供了AUI模块 wx.lib.agw.aui,而 wx.aui也依然保留着。相比较而言,我更喜欢使用wx.lib.agw的AUI框架。

使用AUI框架可以概括为以下四步:

  1. 创建一个布局管理器:mgr = aui.AuiManager

  2. 告诉主窗口由mgr来管理界面:mgr.SetManagedWindow

  3. 添加界面上的各个区域:mgr.AddPane

  4. 更新界面显示:mgr.Update

下面的代码演示了如何使用AUI布局管理器创建和管理窗口界面。

import wximport wx.lib.agw.aui as aui
class MainFrame(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) if d.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 return tb def on_switch(self, evt): """切换信息显示窗口""" p0 = self._mgr.GetPane('CenterPanel0') p1 = self._mgr.GetPane('CenterPanel1') p0.Show(not p0.IsShown) p1.Show(not p1.IsShown) self._mgr.Update
if __name__ == '__main__': app = wx.App frame = MainFrame(None) frame.Show app.MainLoop

代码运行界面如下图所示。

me的保存路径怎么查看,ME软件使用(13)

me的保存路径怎么查看,ME软件使用(14)

示例和技巧

6.1. 相册

前文的例子中已经展示了wx.StaticBitmap控件作为图像容器的例子,下面的例子用它制作了一个相册,点击前翻后翻按钮可在多张照片之间循环切换。

import wx
class MainFrame(wx.Frame): """从wx.Frame派生主窗口类""" 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((980, 680)) self._init_ui self.Center def _init_ui(self): """初始化界面""" self.curr = 0 self.photos = ('res/DSC03363.jpg', 'res/DSC03394.jpg', 'res/DSC03402.jpg') bmp = wx.Bitmap(self.photos[self.curr]) self.album = wx.StaticBitmap(self, -1, bmp, pos=(280, 10)) btn_1 = wx.Button(self, -1, '<', size=(80, 30), name='prev') btn_2 = wx.Button(self, -1, '>', size=(80, 30), name='next') btn_1.Bind(wx.EVT_BUTTON, self.on_btn) btn_2.Bind(wx.EVT_BUTTON, self.on_btn) sizer_btn = wx.BoxSizer sizer_btn.Add(btn_1, 0, wx.RIGHT, 20) sizer_btn.Add(btn_2, 0, wx.LEFT, 20) sizer_max = wx.BoxSizer(wx.VERTICAL) sizer_max.Add(self.album, 1, wx.EXPAND | wx.ALL, 10) sizer_max.Add(sizer_btn, 0, wx. ALIGN_CENTER | wx.BOTTOM, 20) self.SetSizer(sizer_max) self.Layout def on_btn(self, evt): """响应按键""" name = evt.GetEventObject.GetName if name == '<': self.curr = (self.curr-1)%len(self.photos) else: self.curr = (self.curr 1)%len(self.photos) self.album.SetBitmap(wx.Bitmap(self.photos[self.curr]))
if __name__ == '__main__': app = wx.App frame = MainFrame(None) frame.Show app.MainLoop

代码运行界面如下图所示。

me的保存路径怎么查看,ME软件使用(15)

6.2. 会弹琴的计算器

几乎所有的GUI课程都会用计算器作为例子,wxPython怎能缺席呢?下面这个计算器除了常规的计算外,按下每个键都会发出不同的音调,粗通乐理就可以弹奏出乐曲。此外,代码中使用了wx.lib控件库的按键,略带3D风格。

import wximport wx.lib.buttons as wxbtnimport winsound
class MainFrame(wx.Frame): """桌面程序主窗口类""" def __init__(self): """构造函数""" wx.Frame.__init__(self, parent=None, style=wx.CAPTION|wx.SYSTEM_MENU|wx.CLOSE_BOX|wx.MINIMIZE_BOX|wx.SIMPLE_BORDER) self.SetTitle('会弹琴的计算器') self.SetIcon(wx.Icon('res/wx.ico', wx.BITMAP_TYPE_ICO)) self.SetBackgroundColour((217, 228, 241)) self.SetSize((287, 283)) self._init_ui self.Center def _init_ui(self): """初始化界面""" # 定义按键排列顺序和名称 keys = [ ['(', ')', 'Back', 'Clear'], ['7', '8', '9', '/'], ['4', '5', '6', '*'], ['1', '2', '3', '-'], ['0', '.', '=', ' '] ] # 指定每个按键声音的频率,523赫兹就是C调中音 self.keySound = { '(':392, ')': 440, '0':494, '1':523, '2':587, '3':659, '4':698, '5':784, '6':880, '7':988, '8':1047, '9':1175, '.':1318, ' ':523, '-':587, '*':659, '/':698, 'Clear':784, 'Back':880, '=':2000 } # 用输入框控件作为计算器屏幕,设置为只读(wx.TE_READONLY)和右齐(wx.ALIGN_RIGHT) self.screen = wx.TextCtrl(self, -1, '', pos=(10,10), size=(252,45), style=wx.TE_READONLY|wx.ALIGN_RIGHT) self.screen.SetFont(wx.Font(20, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False, '微软雅黑')) # 设置字体字号 self.screen.SetBackgroundColour((0, 0, 0)) # 设置屏幕背景色 self.screen.SetForegroundColour((0, 255, 0)) # 设置屏幕前景色 # 按键布局参数 btn_size = (60, 30) # 定义按键的尺寸,便于统一修改 x0, y0 = (10, 65) # 定义按键区域的相对位置 dx, dy = (64, 34) # 定义水平步长和垂直步长 # 生成所有按键 for i in range(len(keys)): for j in range(len(keys[i])): key = keys[i][j] btn = wxbtn.GenButton(self, -1, key, pos=(x0 j*dx, y0 i*dy), size=btn_size, name=key) if key in ['0','1','2','3','4','5','6','7','8','9','.']: btn.SetBezelWidth(1) # 设置3D效果 btn.SetBackgroundColour(wx.Colour(217, 228, 241)) # 定义按键的背景色 elif key in ['(',')','Back','Clear']: btn.SetBezelWidth(2) btn.SetBackgroundColour(wx.Colour(217, 220, 235)) btn.SetForegroundColour(wx.Colour(224, 60, 60)) elif key in [' ','-','*','/']: btn.SetBezelWidth(2) btn.SetBackgroundColour(wx.Colour(246, 225, 208)) btn.SetForegroundColour(wx.Colour(60, 60, 224)) else: btn.SetBezelWidth(2) btn.SetBackgroundColour(wx.Colour(245, 227, 129)) btn.SetForegroundColour(wx.Colour(60, 60, 224)) btn.SetToolTip(u"显示计算结果") self.Bind(wx.EVT_BUTTON, self.on_button) # 将按钮事件绑定在所有按钮上 def on_button(self, evt): """响应鼠标左键按下""" obj = evt.GetEventObject # 获取事件对象(哪个按钮被按) key = obj.GetName # 获取事件对象的名字 self.PlayKeySound(key) # 播放按键对应频率的声音 if self.screen.GetValue == 'Error': self.screen.SetValue('') if key == 'Clear': # 按下了清除键,清空屏幕 self.screen.SetValue('') elif key == 'Back': # 按下了回退键,去掉最后一个输入字符 content = self.screen.GetValue if content: self.screen.SetValue(content[:-1]) elif key == '=': # 按下了等号键,则计算 try: result = str(eval(self.screen.GetValue)) except: result = 'Error' self.screen.SetValue(result) else: # 按下了其他键,追加到显示屏上 self.screen.AppendText(key) def PlayKeySound(self, key, Dur=100): """播放按键声音""" winsound.Beep(self.keySound[key], Dur)
if __name__ == '__main__': app = wx.App frame = MainFrame frame.Show app.MainLoop

代码运行界面如下图所示。

me的保存路径怎么查看,ME软件使用(16)

上一页12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.