python图形开发GUI库wxpython使用方法详解


Posted in Python onFebruary 14, 2020

一、python gui(图形化)模块介绍:

Tkinter :是python最简单的图形化模块,总共只有14种组建

Pyqt     :是python最复杂也是使用最广泛的图形化

Wx       :是python当中居中的一个图形化,学习结构很清晰

Pywin   :是python windows 下的模块,摄像头控制(opencv),常用于外挂制作

二、wx模块的安装:

C:\Users\Administrator> pip install wxpython

三、图形化介绍

python图形开发GUI库wxpython使用方法详解

 python图形开发GUI库wxpython使用方法详解

四、wx主要组件介绍

1、frame(窗口)

参数:

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

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

title = None #窗口组件的名称

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

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

style = None #组件的样式

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

2、TextCtrl(文本框)

参数:

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

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

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

         GetValue #获取文本框的值

         SetValue #设置文本框的值

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

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

style = None #组件的样式

validator = None #验证

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

3、Button(按钮)

参数:

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

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

lable = None #按钮的标签

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

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

style = None #组件的样式

validator = None #验证

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

其它组件的参数类似

4、创建窗口基础代码

基本创建窗口代码说明:

import wx #引入wx模块
app = wx.App() #实例化一个主循环<br>
frame = wx.Frame(None) #实例化一个窗口<br>
frame.Show()#调用窗口展示功能<br>
app.MainLoop()#启动主循环

效果如下图:

python图形开发GUI库wxpython使用方法详解

五、Gui编写简单实例

实现如下一个GUI界面,在上面文本框中输入文本文件地址,点击“打开”按钮后将文本文件内容显示在下面的文本框中。

python图形开发GUI库wxpython使用方法详解

1、图形化编写

import wx
 
app = wx.App()
frame = wx.Frame(None,title = "Gui Test Editor",pos = (1000,200),size = (500,400))
 
path_text = wx.TextCtrl(frame,pos = (5,5),size = (350,24))
open_button = wx.Button(frame,label = "打开",pos = (370,5),size = (50,24))
save_button = wx.Button(frame,label = "保存",pos = (430,5),size = (50,24))
content_text= wx.TextCtrl(frame,pos = (5,39),size = (475,300),style = wx.TE_MULTILINE) # wx.TE_MULTILINE可以实现换行功能,若不加此功能文本文档显示为一行显示
frame.Show() app.MainLoop()

2、事件绑定

1、定义事件函数

事件函数有且只有一个参数,叫event

def openfile(event):
  path = path_text.GetValue()
  with open(path,"r",encoding="utf-8") as f: #encoding 设置文件打开时指定为utf8编码,避免写文件时出现编码错误
    content_text.SetValue(f.read())

2、绑定出发事件的条件和组件

open_button.Bind(wx.EVT_BUTTON,openfile)

3、完整代码

#coding:utf-8
import wx
 
def openfile(event):   # 定义打开文件事件
  path = path_text.GetValue()
  with open(path,"r",encoding="utf-8") as f: # encoding参数是为了在打开文件时将编码转为utf8
    content_text.SetValue(f.read())
 
app = wx.App()
frame = wx.Frame(None,title = "Gui Test Editor",pos = (1000,200),size = (500,400))
 
path_text = wx.TextCtrl(frame,pos = (5,5),size = (350,24))
open_button = wx.Button(frame,label = "打开",pos = (370,5),size = (50,24))
open_button.Bind(wx.EVT_BUTTON,openfile)  # 绑定打开文件事件到open_button按钮上
 
save_button = wx.Button(frame,label = "保存",pos = (430,5),size = (50,24))
 
content_text= wx.TextCtrl(frame,pos = (5,39),size = (475,300),style = wx.TE_MULTILINE)
# wx.TE_MULTILINE可以实现以滚动条方式多行显示文本,若不加此功能文本文档显示为一行
 
frame.Show()
app.MainLoop()

python图形开发GUI库wxpython使用方法详解

六、尺寸器

按照上面的GUI代码有一个缺陷,由于我们各个组件都固定了大小,因此在框体拉伸时,对应的组件不会对应进行拉伸,比较影响用户体验。

python图形开发GUI库wxpython使用方法详解

为了解决上述这个问题,我们可以使用尺寸器进行布局,类似于HTML的CSS样式。

1、BoxSizer(尺寸器)

  • 尺寸器作用于画布(panel)
  • 默认水平布局
  • 垂直布局可以调整
  • 按照相对比例

2、步骤

  • 实例化尺寸器(可以是多个)
  • 添加组件到不同尺寸器中
  • 设置相对比例、填充的样式和方向、边框等参数
  • 设置主尺寸器

3、将上面代码通过尺寸器改写

python图形开发GUI库wxpython使用方法详解

#coding:utf-8
import wx
 
def openfile(event):   # 定义打开文件事件
  path = path_text.GetValue()
  with open(path,"r",encoding="utf-8") as f: # encoding参数是为了在打开文件时将编码转为utf8
    content_text.SetValue(f.read())
 
app = wx.App()
frame = wx.Frame(None,title = "Gui Test Editor",pos = (1000,200),size = (500,400))
 
panel = wx.Panel(frame)
 
path_text = wx.TextCtrl(panel)
open_button = wx.Button(panel,label = "打开")
open_button.Bind(wx.EVT_BUTTON,openfile)  # 绑定打开文件事件到open_button按钮上
 
save_button = wx.Button(panel,label = "保存")
 
content_text= wx.TextCtrl(panel,style = wx.TE_MULTILINE)
# wx.TE_MULTILINE可以实现以滚动条方式多行显示文本,若不加此功能文本文档显示为一行
 
box = wx.BoxSizer() # 不带参数表示默认实例化一个水平尺寸器
box.Add(path_text,proportion = 5,flag = wx.EXPAND|wx.ALL,border = 3) # 添加组件
  #proportion:相对比例
  #flag:填充的样式和方向,wx.EXPAND为完整填充,wx.ALL为填充的方向
  #border:边框
box.Add(open_button,proportion = 2,flag = wx.EXPAND|wx.ALL,border = 3) # 添加组件
box.Add(save_button,proportion = 2,flag = wx.EXPAND|wx.ALL,border = 3) # 添加组件
 
v_box = wx.BoxSizer(wx.VERTICAL) # wx.VERTICAL参数表示实例化一个垂直尺寸器
v_box.Add(box,proportion = 1,flag = wx.EXPAND|wx.ALL,border = 3) # 添加组件
v_box.Add(content_text,proportion = 5,flag = wx.EXPAND|wx.ALL,border = 3) # 添加组件
 
panel.SetSizer(v_box) # 设置主尺寸器
 
frame.Show()
app.MainLoop()

通过尺寸器进行布局,无论宽体如何拉伸,内部的组件都会按比例进行变化。

python图形开发GUI库wxpython使用方法详解

python图形开发GUI库wxpython使用方法详解

更多关于python图形开发GUI库wxpython使用方法请查看下面的相关链接

Python 相关文章推荐
python网络编程学习笔记(二):socket建立网络客户端
Jun 09 Python
神经网络理论基础及Python实现详解
Dec 15 Python
Django学习笔记之ORM基础教程
Mar 27 Python
在Python中COM口的调用方法
Jul 03 Python
Python3的高阶函数map,reduce,filter的示例详解
Jul 23 Python
Python OpenCV图像指定区域裁剪的实现
Oct 30 Python
python模拟预测一下新型冠状病毒肺炎的数据
Feb 01 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
python 读取、写入txt文件的示例
Sep 27 Python
详解Python中的文件操作
Jan 14 Python
python实现简单的学生管理系统
Feb 22 Python
Python Django搭建文件下载服务器的实现
May 10 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
Feb 14 #Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
Feb 14 #Python
Python实现名片管理系统
Feb 14 #Python
pycharm设置当前工作目录的操作(working directory)
Feb 14 #Python
python设置代理和添加镜像源的方法
Feb 14 #Python
pycharm 中mark directory as exclude的用法详解
Feb 14 #Python
Python读取分割压缩TXT文本文件实例
Feb 14 #Python
You might like
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
PHP实现今天是星期几的几种写法
2013/09/26 PHP
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
php邮件发送的两种方式
2020/04/28 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
2016/01/08 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
动手学习无线电
2021/03/10 无线电
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
javascript prototype,executing,context,closure
2008/12/24 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
使用JS+plupload直接批量上传图片到又拍云
2014/12/01 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
[44:37]完美世界DOTA2联赛PWL S3 Forest vs access 第一场 12.11
2020/12/13 DOTA
基于python代码实现简易滤除数字的方法
2018/07/17 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
后勤人员自我评价怎么写
2013/09/19 职场文书
毕业自我鉴定
2013/11/05 职场文书
教育局长自荐信范文
2013/12/22 职场文书
经销商培训邀请函
2014/01/21 职场文书
施工安全责任书范本
2014/07/24 职场文书
详解python网络进程
2021/06/15 Python
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL