Python GUI编程:wxPython模块之下拉列表和菜单

2023年 7月 12日 38.3k 0

  1. 下拉列表

下拉列表是由一个文本框和一个列表组成的,它有两种方法可以使用,一种是wx.ComboBox,一种是wx.Choice,前者的文本框是可变的,而后者的是固定的。

我们直接通过例子来看一下:

123456789101112131415161718192021222324252627 import wxclass MyFrame(wx.Frame):    def __init__(self):        wx.Frame.__init__(selfNone-1"下拉列表", size=(300300))        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()

运行结果如下图:

Python GUI编程:wxPython模块之下拉列表和菜单             Python GUI编程:wxPython模块之下拉列表和菜单

我们可以看出两种列表的不同之处,选择使用wx.Choice的时候,选择框中的内容是固定的,只有从列表中选择,而使用wx.ComboBox的时候选择框中的内容不是固定的,关键语句:

12 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. 菜单

我们可以发现在日常生活中使用的大多图形用户界面都是有菜单项的,如下面的几张图:

Python GUI编程:wxPython模块之下拉列表和菜单

Python GUI编程:wxPython模块之下拉列表和菜单

Python GUI编程:wxPython模块之下拉列表和菜单

点击其中一个菜单项还有多个选项供我们选择,下面我们来学习使用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)

代码如下:

12345678910111213141516171819202122232425262728 import wxclass MyFrame(wx.Frame):    def __init__(self):        super().__init__(parent=None, title="wxPython", size=(400300))        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()

运行结果如下:

Python GUI编程:wxPython模块之下拉列表和菜单

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论