wxPython是一个开发桌面端图形界面的跨平台函数库,开发语言为Python,它是基于C++的函数库wxWidgets的封装 。
私信小编01即可获取Python学习资料
wxpython有大量组件,它们可以从逻辑上(注意是逻辑上)这样划分:
(1)基础组件
文章插图
这些组件为其所派生的子组件提供基础功能,通常不直接使用 。
(2)顶层组件
文章插图
?
这些组件相互独立存在 。
(3)容器
文章插图
?
这些组件包含其他组件 。
(4)动态组件
文章插图
?
这些组件可以被用户所交互编辑 。
(5)静态组件
文章插图
?
这些组件用来展示信息,无法被用户所交互编辑 。
(6)其他组件
文章插图
?
这些组件包括状态栏、工具栏、菜单栏等 。
除了逻辑上的划分,各个组件之间还存在着继承关系,以一个button组件为例:
文章插图
?
Button是一个小window,具体地,它是继承自wx.Control这一类的window(有些组件是window,但不是继承自wx.Control,比如wx.Dialog,更具体来说,controls这类组件是可放置在containers这类组件上的组件) 。同时所有的windows都可以响应事件,button也不例外,因此它还继承自wx.EvtHandler 。最后,所有的wxpython对象都继承自wx.Object类 。
wxPython的“你好世界”这个例子是wxPython的最小可用例子,用来say hello to the world:
import wxApp = wx.App()frame = wx.Frame(None, title='Hello World')frame.Show()app.MainLoop()
麻雀虽小五脏俱全,该例子包含了最基本的代码和组件:(1)首先导入wxPython库:
import wx
wx可视为一个命名空间,后面所有的函数和类都以它开头 。(2)创建应用实例:
app = wx.App()
每一个wxPython程序都必须有一个应用实例 。(3)创建应用框架并显示:
frame = wx.Frame(None, title='Hello World')frame.Show()
这里创建了一个wx.Frame对象 。wx.Frame是一个重要的“容器”组件,它用来承载其他组件,它本身没有父组件(如果我们给组件的parent参数设为None,即代表该组件没有父组件) 。创建该对象后,还需调用Show方法才能显示出来 。wx.Frame的构造函数一共有七个参数:
wx.Frame(wx.Window parent, int id=-1, string title='', wx.Point pos=wx.DefaultPosition,wx.Size size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE, string name="frame")
除了第一个parent参数需要显式指定,其余六个都有默认值,包括ID、名称、位置、尺寸和样式等 。因此,可以通过改变这些参数来进一步地对该frame进行个性化定制 。(4)启动程序主循环:
app.MainLoop()
程序的主循环是一个无限循环模式,它捕获并分发程序生命周期内的所有事件 。菜单栏和工具栏菜单栏菜单栏主要由三部分组成:wx.MenuBar、wx.Menu和wx.MenuItem 。
在菜单栏MenuBar中可以添加菜单Menu,在菜单Menu中又可以添加菜单项MenuItem 。
添加完后不要忘了使用SetMenuBar来将菜单栏加入到框架中 。
进一步地,在某个菜单Menu中,还可以添加子菜单SubMenu,然后继续添加菜单项 。
还可以给菜单设置图标、快捷键、对wx.EVT_MENU事件的动作、菜单样式(打勾、单选)等 。
上下文菜单上下文菜单有时叫做“弹出菜单”,比如右键某个位置,出现上下文选项 。
工具栏工具栏的添加也是类似流程:先添加工具栏CreateToolBar,然后在上面添加工具AddTool 。
别忘了使用toolbar.Realize()使之呈现出来(这一步与操作系统有关,linux上不强制使用,Windows必须使用,为了跨平台性,最好将这一步明确写出) 。
对于某个工具,可以设置逻辑使之Enable或Disable,常见的比如undo和redo,这两个按钮不是一直可以点的,在最开始时redo就必须是disabled,因为没有历史操作,所以可以设置具体的逻辑使之disable掉 。
推荐阅读
- 深入了解python的3D高级库pyvista
- 汽车车道视频检测:python+OpenCV为主实现
- Python网络爬虫数据提取神器 Selector 的用法
- 同步与异步Python有何不同?
- 用Python演示ARP攻击的过程及应对办法
- 使用Python调整图像大小
- 使用 Python 自动发送 QQ 消息
- 如果C++最强大,为什么它不及Java、Python流行?
- python 中日志异步发送到远程服务器
- Python爬虫案例:爬取微信公众号文章