python GUI图形化编程wxpython的使用


Posted in Python onJuly 19, 2019

一、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 相关文章推荐
Python自动化测试工具Splinter简介和使用实例
May 13 Python
Python的字典和列表的使用中一些需要注意的地方
Apr 24 Python
用Python实现web端用户登录和注册功能的教程
Apr 30 Python
简单分析Python中用fork()函数生成的子进程
May 04 Python
python字符串,数值计算
Oct 05 Python
python爬虫实战之爬取京东商城实例教程
Apr 24 Python
python机器学习之神经网络(二)
Dec 20 Python
python实现NB-IoT模块远程控制
Jun 20 Python
在Python中使用gRPC的方法示例
Aug 08 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
Apr 09 Python
在python 中split()使用多符号分割的例子
Jul 15 Python
python统计mysql数据量变化并调用接口告警的示例代码
Sep 21 Python
Django 外键的使用方法详解
Jul 19 #Python
python原类、类的创建过程与方法详解
Jul 19 #Python
Django 全局的static和templates的使用详解
Jul 19 #Python
python之拟合的实现
Jul 19 #Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 #Python
python SVM 线性分类模型的实现
Jul 19 #Python
Django密码系统实现过程详解
Jul 19 #Python
You might like
mysql数据库差异比较的PHP代码
2012/02/05 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
谈谈js中的prototype及prototype属性解释和常用方法
2015/11/25 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等的简单实现
2016/08/31 Javascript
js 毫秒转天时分秒的实例
2017/11/17 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
2018/02/13 jQuery
VUE 3D轮播图封装实现方法
2018/07/03 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
Python使用filetype精确判断文件类型
2017/07/02 Python
Python实现的生成格雷码功能示例
2018/01/24 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
艺术系应届生的自我评价
2013/10/19 职场文书
工程业务员岗位职责
2013/12/31 职场文书
幸福家庭标语
2014/06/27 职场文书
齐云山导游词
2015/02/06 职场文书
费用申请报告范文
2015/05/15 职场文书
追讨欠款律师函
2015/05/27 职场文书
风雨哈佛路观后感
2015/06/03 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
logback如何自定义日志存储
2021/08/30 Java/Android