Python如何用wx模块创建文本编辑器


Posted in Python onJune 07, 2020

用Python的wx模块创建文本编辑器的方法:

1、设置按钮的位置

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()

2、对窗口内容进行布局

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()

3、添加事件处理函数

在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模块创建文本编辑器

内容扩展:

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

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

* 它可以编辑文件文件

* 它可以保存文本文件

* 它可以正常退出程序

设置按钮位置

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()

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

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

到此这篇关于Python如何用wx模块创建文本编辑器的文章就介绍到这了,更多相关Python的wx模块创建文本编辑器方法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
9种python web 程序的部署方式小结
Jun 30 Python
Windows下Python的Django框架环境部署及应用编写入门
Mar 10 Python
python SMTP实现发送带附件电子邮件
May 22 Python
Anaconda2 5.2.0安装使用图文教程
Sep 19 Python
Python简单基础小程序的实例代码
Apr 28 Python
Python根据服务获取端口号的方法
Sep 25 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 Python
win10环境下配置vscode python开发环境的教程详解
Oct 16 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
浅析python字符串前加r、f、u、l 的区别
Jan 24 Python
Python如何使用神经网络进行简单文本分类
Feb 25 Python
Python爬虫基础讲解之请求
May 13 Python
python如何查看网页代码
Jun 07 #Python
python中对二维列表中一维列表的调用方法
Jun 07 #Python
python学习将数据写入文件并保存方法
Jun 07 #Python
详解python如何引用包package
Jun 07 #Python
Python如何输出整数
Jun 07 #Python
Django form表单与请求的生命周期步骤详解
Jun 07 #Python
python ETL工具 pyetl
Jun 07 #Python
You might like
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
Javascript 类与静态类的实现
2010/04/01 Javascript
利用腾讯的ip地址库做ip物理地址定位
2010/07/24 Javascript
编写Js代码要注意的几条规则
2010/09/10 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
解决Layui数据表格显示无数据提示的问题
2019/11/14 Javascript
vue-cli3 引入 font-awesome的操作
2020/08/11 Javascript
Python 解析XML文件
2009/04/15 Python
Python正则表达式介绍
2012/08/06 Python
十个Python程序员易犯的错误
2015/12/15 Python
python实现list由于numpy array的转换
2018/04/04 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
什么是GWT的Entry Point
2013/08/16 面试题
酒店总经理工作职责
2013/12/13 职场文书
九年级历史教学反思
2014/01/27 职场文书
优秀共产党员先进事迹
2014/01/27 职场文书
运动会方阵解说词
2014/02/12 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
班组长安全工作职责
2014/07/15 职场文书
2015年度保密工作总结
2015/04/24 职场文书
python 逐步回归算法
2021/04/06 Python
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python