wxPython界面设计初体验-值得学习的 Python GUI 库 (2)

简介: 前两篇文章写了关于Python GUI库Tkinter和pyqt5的使用体验,但是Python GUI怎么能少得了wxpython呢?不能偏心,必须安排全了,一家人必须整整齐齐(哈哈哈~)Python GUI作为桌面软件设计重要部分,是开发桌软中不可或缺,也是不可避免的一环,灵活掌握GUI库的使用,才能让自己不惧任何GUI相关的需求,设计出的界面更加符合需求,更加精美.给用户的第一印象是界面设计,毕竟大家大多都是外貌协会,简洁且好看的页面,是一个软件或者程序吸引人的最大亮点,所以掌握各种GUI的使用是我们桌面软件开发程序猿的必备技能,就算工作不需要,平时搞个辅助小软件也是不错,总不能要

序言


前两篇文章写了关于Python GUI库Tkinter和pyqt5的使用体验,但是Python GUI怎么能少得了wxpython呢?不能偏心,必须安排全了,一家人必须整整齐齐(哈哈哈~)

Python GUI作为桌面软件设计重要部分,是开发桌软中不可或缺,也是不可避免的一环,灵活掌握GUI库的使用,才能让自己不惧任何GUI相关的需求,设计出的界面更加符合需求,更加精美.


给用户的第一印象是界面设计,毕竟大家大多都是外貌协会,简洁且好看的页面,是一个软件或者程序吸引人的最大亮点,所以掌握各种GUI的使用是我们桌面软件开发程序猿的必备技能,就算工作不需要,平时搞个辅助小软件也是不错,总不能要求用户使用命令吧,可视化可以使操作更简单,同时能够降低用户的学习成本.毕竟能为大家提供便利的软件才是好软件

学会GUI的使用这么多好处,那就赶紧行动-学起来.


wxPython介绍


wxPython是 Python 语言开源的跨平台 GUI 工具包。使用 wxPython,软件开发人员可以为他们的 Python 应用程序创建真正的本地用户界面,这些应用程序在 Windows、Mac 和 Linux 或其他类 unix 系统上几乎不需要修改即可运行。它被实现为一组 Python 扩展模块,这些模块包装了流行的 wxWidgets跨平台库的 GUI 组件,该库是用 C++ 编写的。在大多数情况下,每个平台都使用原生小部件来为应用程序提供 100% 原生的外观和感觉。


wxPython的特点:开源跨平台简单易写易懂

wxPython和wxPython Phoenix的区别:wxPython 的 Project Phoenix 是一个全新的 wxPython 实现,旨在使 wxPython “比以前更好、更强大、更快”。换句话说,这个新实现的重点是提高 wxPython 的速度、可维护性和可扩展性,以及消除在经典 wxPython 漫长的生命周期中积累的大部分杂物。


wxPython的安装


目前最新发布版本是wxPython4.1.1

wxPython和其他Python第三方库的安装一样简单,window和mac命令如下:


pip install -U wxPython


Linux或者其他平台安装命令:


pip install -U \
-f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-16.04 \
    wxPython


当然你也可以自己通过Anaconda安装或者GitHub下载之后手动安装,甚至可以通过下载源码自己编译后安装


官方下载:https://www.wxpython.org/pages/downloads/


安装截图:


网络异常,图片无法展示
|


组件属性


Frame组件参数:

parent =None #父元素,假如为None,代表顶级窗口

id= None #组件的标识,唯一,假如id为-1代表系统分配id

title =None #窗口组件的名称

pos =None #组件的位置,就是组件左上角点距离父组件或者桌面左和上的距离

size =None #组件的尺寸,宽高

style =None #组件的样式

name =None #组件的名称,也是用来标识组件的,但是用于传值


TextCtrl(文本框)属性


parent = None #父元素,假如为None,代表顶级窗口

id = None #组件的标识,唯一,假如id为-1代表系统分配id

value = None   #文本框当中的内容

        GetValue #获取文本框的值

        SetValue #设置文本框的值

pos = None #组件的位置,就是组件左上角点距离父组件或者桌面左和上的距离

size = None #组件的尺寸,宽高

style = None #组件的样式

validator = None #验证

name = None #组件的名称,也是用来标识组件的,但是用于传值



Button属性


parent = None #父元素,假如为None,代表顶级窗口

id = None #组件的标识,唯一,假如id为-1代表系统分配id

lable = None #按钮的标签

pos = None #组件的位置,就是组件左上角点距离父组件或者桌面左和上的距离

size = None #组件的尺寸,宽高

style = None #组件的样式

validator = None #验证

name = None #组件的名称,也是用来标识组件的,但是用于传值


所有的组件属性基本一样


小试牛刀


窗口创建

# 导包importwx# 创建wxPython对象app=wx.App()
# 创建一个窗口frm=wx.Frame(None, title="我的浏览器")
# 渲染展示.frm.Show()
#在窗口展示文字st=wx.StaticText(frm, label="我的界面")
font=st.GetFont()
font.PointSize+=10font=font.Bold()
st.SetFont(font)
# 启动事件循环app.MainLoop()


页面外观跟tkinter一样


网络异常,图片无法展示
|


渐入佳境


在页面添加按钮和输入框


# 导包importwx# 创建wxPython对象app=wx.App()
# 创建一个窗口size为界面大小frm=wx.Frame(None, title="我的浏览器",size=(600,400))
# 渲染展示.frm.Show()
openButton=wx.Button(frm, label='打开文件',pos= (225,5),size= (100,30))
saveButton=wx.Button(frm, label='保存文件',pos= (345,5),size= (100,30))
filename=wx.TextCtrl(frm, pos= (5,5),size= (210,30),name="文件地址") #输入框contents=wx.TextCtrl(frm, pos= (5,35),size= (580,325), style=wx.TE_MULTILINE|wx.HSCROLL|wx.TE_RICH) #多行文本框# 启动事件循环app.MainLoop()

网络异常,图片无法展示
|


将页面放到Panel中,让界面更美观更容易


# 导包importwx# 创建wxPython对象app=wx.App()
# 创建一个窗口size为界面大小frm=wx.Frame(None, title="我的浏览器",size=(600,400))
pnl=wx.Panel(frm)
openButton=wx.Button(pnl, label='打开文件',pos= (225,5),size= (100,30))
saveButton=wx.Button(pnl, label='保存文件',pos= (345,5),size= (100,30))
filename=wx.TextCtrl(pnl, pos= (5,5),size= (210,30),name="文件地址") #输入框contents=wx.TextCtrl(pnl, pos= (5,35),size= (580,325), style=wx.TE_MULTILINE|wx.HSCROLL|wx.TE_RICH) #多行文本框# 渲染展示.frm.Show()
# 启动事件循环app.MainLoop()


网络异常,图片无法展示
|


让页面自适应,布局更灵活,使用BoxSizer进行自动布局


# 导包importwx# 创建wxPython对象app=wx.App()
# 创建一个窗口size为界面大小frm=wx.Frame(None, title="我的浏览器",size=(600,400))
pnl=wx.Panel(frm)
openButton=wx.Button(pnl, label='打开文件',pos= (225,5),size= (100,30))
saveButton=wx.Button(pnl, label='保存文件',pos= (345,5),size= (100,30))
filename=wx.TextCtrl(pnl, pos= (5,5),size= (210,30),name="文件地址") #输入框contents=wx.TextCtrl(pnl, pos= (5,35),size= (580,325), style=wx.TE_MULTILINE|wx.HSCROLL|wx.TE_RICH) #多行文本框hbox=wx.BoxSizer()
hbox.Add(filename, proportion=1, flag=wx.EXPAND)
hbox.Add(openButton, proportion=0,flag=wx.LEFT, border=5)
hbox.Add(saveButton, proportion=0,flag=wx.LEFT, border=5)
box=wx.BoxSizer(wx.VERTICAL)
box.Add(hbox,proportion=0,flag=wx.EXPAND|wx.ALL, border=5)
box.Add(contents, proportion=1,flag=wx.EXPAND|wx.LEFT|wx.BOTTOM|wx.RIGHT, border=5)
pnl.SetSizer(box)
# 渲染展示.frm.Show()
# 启动事件循环app.MainLoop()


给页面添加导航菜单


#创建文件菜单fileMenu=wx.Menu()
#添加到MenuhelloItem=fileMenu.Append(-1, "&欢迎...\tCtrl-H","打开欢迎页面")
fileMenu.AppendSeparator()
# 退出exitItem=fileMenu.Append(wx.ID_EXIT)
# 创建帮助菜单helpMenu=wx.Menu()
aboutItem=helpMenu.Append(wx.ID_ABOUT)
# 把创建好的菜单项加入导航栏menuBar=wx.MenuBar()
menuBar.Append(fileMenu, "&文件")
menuBar.Append(helpMenu, "&帮助")
# 设置显示导航栏frm.SetMenuBar(menuBar)


网络异常,图片无法展示
|


给页面添加状态栏


frm.CreateStatusBar()
frm.SetStatusText("欢迎你!")


网络异常,图片无法展示
|


给导航栏添加事件


#给按钮绑定事件frm.Bind(wx.EVT_MENU, OnHello, helloItem)
frm.Bind(wx.EVT_MENU, OnExit,  exitItem)
frm.Bind(wx.EVT_MENU, OnAbout, aboutItem)


触发函数


defOnExit(event):
#关闭窗口frm.Close(True)
defOnHello(event):
#欢迎按钮的绑定事件wx.MessageBox("欢迎再次使用!")
defOnAbout(event):
#关于按钮的绑定事件wx.MessageBox("感谢您的使用",
"关于软件",
wx.OK|wx.ICON_INFORMATION)


按钮绑定事件,按钮的事件绑定和导航的事件绑定是一样的,只是绑定的类型不一样.导航菜单是:wx.EVT_MENU,而按钮是wx.EVT_BUTTON


defopenfile(event):
path=filename.GetValue() #获取文本框的值# 设置utf8编码,避免写文件时出现乱码withopen(path,"r",encoding="utf-8") asf:
contents.SetValue(f.read()) #读取文件并把内容放到文本框#在按钮下面加入绑定事件代码open_button.Bind(wx.EVT_BUTTON,openfile)


网络异常,图片无法展示
|


上述为wxPython基础用法,更多用法待你发现....

目录
相关文章
|
2月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
308 1
|
2月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
170 1
|
2月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
266 1
|
2月前
|
数据可视化 关系型数据库 MySQL
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
本文详解基于Python的电影TOP250数据可视化大屏开发全流程,涵盖爬虫、数据存储、分析及可视化。使用requests+BeautifulSoup爬取数据,pandas存入MySQL,pyecharts实现柱状图、饼图、词云图、散点图等多种图表,并通过Page组件拖拽布局组合成大屏,支持多种主题切换,附完整源码与视频讲解。
232 4
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
|
2月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
306 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
2月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
157 4
|
3月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
289 102
|
3月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
314 104
|
3月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
260 103

推荐镜像

更多