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通过加号运算符操作列表的方法
Jul 28 Python
python编码最佳实践之总结
Feb 14 Python
python实现实时监控文件的方法
Aug 26 Python
详解基于django实现的webssh简单例子
Jul 17 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 Python
用Python实现最速下降法求极值的方法
Jul 10 Python
python调用接口的4种方式代码实例
Nov 19 Python
浅谈python中频繁的print到底能浪费多长时间
Feb 21 Python
python生成大写32位uuid代码
Mar 03 Python
python装饰器代码深入讲解
Mar 01 Python
Python实现科学占卜 让视频自动打码
Apr 09 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
PHP资源管理框架Assetic简介
2014/06/12 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
2016/06/19 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
JS表格组件神器bootstrap table详解(强化版)
2016/05/26 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
js实现单张图片平移切换效果
2017/10/11 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
JS实现吸顶特效
2020/01/08 Javascript
python双向链表实现实例代码
2013/11/21 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
查看python下OpenCV版本的方法
2018/08/03 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
python3安装OCR识别库tesserocr过程图解
2020/04/02 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
高二化学教学反思
2014/01/30 职场文书
团日活动总结
2014/04/28 职场文书
建筑工程质量通病防治方案
2014/06/08 职场文书
滞留工资返还协议书
2014/10/19 职场文书
工作经历证明书范文
2014/11/02 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
Pytorch中的学习率衰减及其用法详解
2021/06/05 Python
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis
Python列表的索引与切片
2022/04/07 Python