python中wx模块的具体使用方法


Posted in Python onMay 15, 2020

wx包中的方法都是以大写字母开头的,而这和Python的习惯是相反的。

本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口。这里介绍wxPython :

下载地址:http://www.wxpython.org/download.php

根据自己的操作系统下载相应版本。

安装:

安装过程非常简单,以win7系统为例,点击下载的exe 文件,保持安装目录与本机的python目录一致就OK了。

创建并显示一个框架

import wx # 需要导入wx模块
app = wx.App()
win = wx.Frame(None)
win.Show()
app.MainLoop()

运行:

python中wx模块的具体使用方法

我们来创建一个文本编辑器,功能要求如下:

* 它可以打开给定文件名的文本文件;

* 它可以编辑文件文件

* 它可以保存文本文件

* 它可以正常退出程序

一,设置按钮位置

import wx
app = wx.App()
win = wx.Frame(None,title = "编辑器", size=(410,335))
win.Show()

loadButton = wx.Button(win, label = '打开',pos = (225,5),size = (80,25))
saveButton = wx.Button(win, label = '保存',pos = (315,5),size = (80,25))
filename = wx.TextCtrl(win, pos = (5,5),size = (210,25))
contents = wx.TextCtrl(win, pos = (5,35),size = (390,260), style = wx.TE_MULTILINE | wx.HSCROLL)
app.MainLoop()

运行:

 python中wx模块的具体使用方法

这里可能需要注意的是,控件(按钮,输入框)的位置和尺寸,位置和尺寸都包括一对数值:位置包括x 和y坐标,而尺寸包括宽和高。

代码比较简单,按钮控件(打开、保存)就不解释了。需要注意的是文本控件,默认的文本框(text field)就是一行可编译的文本,没有滚动条,为了创建文本区(text area)只要使用style参数调整风格,style 参数的值实际上是个整数,但不用直接指定,可以使用按位或运算符OR联合了wx.TE_MULTILINE来获取多行文件区,以及 wx.HSCROLL来获取水平滚动条。

二、智能的布局

尽管明确每个组件的几何位置很容易理解,但调整起来比较乏味。

import wx
app = wx.App()
win = wx.Frame(None,title = "编辑器", size=(410,335))
bkg = wx.Panel(win)

loadButton = wx.Button(bkg, label = '打开')
saveButton = wx.Button(bkg, label = '保存')
filename = wx.TextCtrl(bkg)
contents = wx.TextCtrl(bkg, style = wx.TE_MULTILINE | wx.HSCROLL)

hbox = wx.BoxSizer()
hbox.Add(filename, proportion =1, flag = wx.EXPAND)
hbox.Add(loadButton, proportion =0,flag = wx.LEFT, border = 5)
hbox.Add(saveButton, proportion =0,flag = wx.LEFT, border = 5)

vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(hbox,proportion = 0,flag = wx.EXPAND | wx.ALL, border = 5)
vbox.Add(contents, proportion = 1,flag=wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT, border = 5)

bkg.SetSizer(vbox)
win.Show()
app.MainLoop()

运行这段代码,窗口会和上面的相同,但是使用了相对坐标而不是绝对坐标。

wx.BoxSizer的构造函数带有一个决定它是水平还是垂直的参数,默认为水平。

add方法有几个参数,proportion参数根据在窗口改变大小时所分配的空间设置比例。flag参数类似于构造函数中的style参数,可

二、添加事件处理

上面的界面做好了,但是我们点击按钮不起任何的作用。

在GUI术语中,用户执行的动作(比如 点击按钮)叫做事件。我们需要让程序注意这些事件并且作出反应。

假设写了一个负责打开文件的函数,并将其命令为load ,然后就可以像下面这样将函数作为loadButton的事件处理函数:

loadButton.Bind(wx.EVT_BUTTON, load)

让我们来完成剩下的工作,现在需要的就是两个事件处理函数:load(打开)和save(保存)。当事件被调用时,它会收到一个事件对象作为它唯一的参数,其中包括发生了什么事情的信息,但是在这里可以忽略这方法的事情,因为程序只关心点击时发生的事情。

def load(event):
  file = open(filename.GetValue())
  contents.SetValue(file.read())
  file.close()

上节刚刚学过文件的打开/读取,文件名使用filename对象GetValue方法获取。为了将文本引入文本区,只要使用contents.SetValue即可。

save函数和load类似,除了它需要写入(‘w'),以及用于文件处理部分的write方法,GetValue用于从文本区获得信息。

def save(event):
  file = open(filename.GetValue(),'w')
  file.write(contents.GetValue())
  file.close()

万事具备,将它们最终组装,内容如下:

import wx

def load(event):
  file = open(filename.GetValue())
  contents.SetValue(file.read())
  file.close()

def save(event):
  file = open(filename.GetValue(),'w')
  file.write(contents.GetValue())
  file.close()

app = wx.App()
win = wx.Frame(None,title = "编辑器", size=(410,335))
bkg = wx.Panel(win)

loadButton = wx.Button(bkg, label = '打开')
loadButton.Bind(wx.EVT_BUTTON,load)

saveButton = wx.Button(bkg, label = '保存')
saveButton.Bind(wx.EVT_BUTTON,save)

filename = wx.TextCtrl(bkg)
contents = wx.TextCtrl(bkg, style = wx.TE_MULTILINE | wx.HSCROLL)

hbox = wx.BoxSizer()
hbox.Add(filename, proportion =1, flag = wx.EXPAND)
hbox.Add(loadButton, proportion =0,flag = wx.LEFT, border = 5)
hbox.Add(saveButton, proportion =0,flag = wx.LEFT, border = 5)

vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(hbox,proportion = 0,flag = wx.EXPAND | wx.ALL, border = 5)
vbox.Add(contents, proportion = 1,flag=wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT, border = 5)

bkg.SetSizer(vbox)
win.Show()
app.MainLoop()

运行:

python中wx模块的具体使用方法

下面玩转这个小程序步骤:

1、文本框输入aaa.txt 

2、文本区输入hello.world!

3、点击保存(不会有保存成功的提示,但它已经成功了)

4、关闭编辑器(只为了好玩),重新运行打开。

5、文件框输入aaa.txt ,点击“打开”按钮,上次编辑的内容(hello.world)在文本区出现了。

到此这篇关于python中wx模块的具体使用方法的文章就介绍到这了,更多相关python wx模块内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Python的列表中利用remove()方法删除元素的教程
May 21 Python
windows环境下tensorflow安装过程详解
Mar 30 Python
Python将多个list合并为1个list的方法
Jun 27 Python
Django中的文件的上传的几种方式
Jul 23 Python
对python多线程与global变量详解
Nov 09 Python
python处理DICOM并计算三维模型体积
Feb 26 Python
详解用python写网络爬虫-爬取新浪微博评论
May 10 Python
Python提取PDF内容的方法(文本、图像、线条等)
Sep 25 Python
Python3.7实现验证码登录方式代码实例
Feb 14 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 Python
Python+Opencv身份证号码区域提取及识别实现
Aug 25 Python
Python爬虫过程解析之多线程获取小米应用商店数据
Nov 14 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
May 15 #Python
python随机模块random的22种函数(小结)
May 15 #Python
将pymysql获取到的数据类型是tuple转化为pandas方式
May 15 #Python
python 数据库查询返回list或tuple实例
May 15 #Python
Python基于gevent实现高并发代码实例
May 15 #Python
Django bulk_create()、update()与数据库事务的效率对比分析
May 15 #Python
Python实现aes加密解密多种方法解析
May 15 #Python
You might like
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
php file_get_contents函数轻松采集html数据
2010/04/22 PHP
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
让焦点自动跳转
2006/07/01 Javascript
JQuery jsonp 使用示例代码
2009/08/12 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
angularjs学习笔记之完整的项目结构
2015/09/26 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
2017/07/24 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
详解elementUI中input框无法输入的问题
2020/04/27 Javascript
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python threading多线程编程实例
2014/09/18 Python
python实现下载文件的三种方法
2017/02/09 Python
Python实现简易端口扫描器代码实例
2017/03/15 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
K近邻法(KNN)相关知识总结以及如何用python实现
2021/01/28 Python
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
一道输出判断型Java面试题
2014/10/01 面试题
体育比赛口号
2014/06/09 职场文书
出生医学证明书
2014/09/15 职场文书
推广普通话主题班会
2015/08/17 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书
导游词之桂林山水
2019/09/20 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL