1. 下拉列表
下拉列表是由一个文本框和一个列表组成的,它有两种方法可以使用,一种是wx.ComboBox,一种是wx.Choice,前者的文本框是可变的,而后者的是固定的。
我们直接通过例子来看一下:
import wx class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, "下拉列表", size=(300, 300)) self.Centre() panel = wx.Panel(self)#创建一个容器 box_one = wx.BoxSizer(wx.HORIZONTAL) text_one = wx.StaticText(panel,label='你喜欢的运动为:') sports = ['篮球','足球','排球'] select_one = wx.ComboBox(panel,-1,value = '足球',choices = sports,style = wx.CB_SORT) box_one.Add(text_one,1,flag=wx.LEFT|wx.RIGHT|wx.FIXED_MINSIZE,border = 7) box_one.Add(select_one,1,flag = wx.ALL|wx.FIXED_MINSIZE) box_two = wx.BoxSizer(wx.HORIZONTAL) text_two = wx.StaticText(panel,label='你喜欢的手机品牌为:') phones = ['小米','华为','苹果'] select_two = wx.Choice(panel,-1,choices = phones,style = wx.CB_SORT) box_two.Add(text_two,1,flag=wx.LEFT|wx.RIGHT|wx.FIXED_MINSIZE,border = 7) box_two.Add(select_two,1,flag = wx.ALL|wx.FIXED_MINSIZE) bbox = wx.BoxSizer(wx.VERTICAL) bbox.Add(box_one,1,flag = wx.ALL|wx.EXPAND,border = 7) bbox.Add(box_two, 1, flag=wx.ALL | wx.EXPAND, border=7) panel.SetSizer(bbox) if __name__ == "__main__": app = wx.App() frame = MyFrame() frame.Show() app.MainLoop()
运行结果如下图:
我们可以看出两种列表的不同之处,选择使用wx.Choice的时候,选择框中的内容是固定的,只有从列表中选择,而使用wx.ComboBox的时候选择框中的内容不是固定的,关键语句:
select_one = wx.ComboBox(panel, -1, value='足球', choices=sports, style=wx.CB_SORT) select_two = wx.Choice(panel, -1, choices=phones, style=wx.CB_SORT)
2. 菜单
我们可以发现在日常生活中使用的大多图形用户界面都是有菜单项的,如下面的几张图:
点击其中一个菜单项还有多个选项供我们选择,下面我们来学习使用wxPython中的功能来实现菜单栏。
1) 创建一个菜单栏:menuBar = wx.MenuBar()。
2) 创建菜单: fileMenu = wx.Menu()
3) 创建菜单项: newItem = wx.MenuItem()
4) 添加菜单项到菜单中: fileMenu.AppendItem(newItem)
5) 添加菜单到菜单栏:menuBar.Append(fileMenu, title = "File")
6) 把菜单栏设置为界面的菜单栏:self.SetMenuBar(menuBar)
7) 绑定菜单事件:self.Bind(wx.EVT_MENT, self.menuHandler)
代码如下:
import wx class MyFrame(wx.Frame): def __init__(self): super().__init__(parent=None, title="wxPython", size=(400, 300)) self.Center() self.text = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE) vbox = wx.BoxSizer(wx.VERTICAL) self.SetSizer(vbox) vbox.Add(self.text, 1, flag=wx.EXPAND | wx.ALL, border=1) menubar = wx.MenuBar()#对应步骤1 self.SetMenuBar(menubar) file_menu = wx.Menu()#对应步骤2 menubar.Append(file_menu, '菜单')#对应步骤4 file_menu.Append(id=wx.ID_NEW, item='新建', helpString='new file') file_menu.AppendSeparator() edit_menu = wx.Menu() file_menu.AppendSubMenu(edit_menu, "编辑") copy_item = wx.MenuItem(edit_menu, 100, text="复制", kind=wx.ITEM_NORMAL)#对应步骤3 edit_menu.Append(copy_item) cut_item = wx.MenuItem(edit_menu, 101, text="剪切", kind=wx.ITEM_NORMAL) edit_menu.Append(cut_item) paste_item = wx.MenuItem(edit_menu, 102, text="粘贴", kind=wx.ITEM_NORMAL) edit_menu.Append(paste_item) if __name__ == "__main__": app = wx.App() frame = MyFrame() frame.Show() app.MainLoop()
运行结果如下:
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程