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 相关文章推荐
python通过urllib2获取带有中文参数url内容的方法
Mar 13 Python
总结网络IO模型与select模型的Python实例讲解
Jun 27 Python
Python中强大的命令行库click入门教程
Dec 26 Python
python实现八大排序算法(2)
Sep 14 Python
Python基础练习之用户登录实现代码分享
Nov 08 Python
详解python字节码
Feb 07 Python
使用python PIL库实现简单验证码的去噪方法步骤
May 10 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
Python 爬虫性能相关总结
Aug 03 Python
python从Oracle读取数据生成图表
Oct 14 Python
python-地图可视化组件folium的操作
Dec 14 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
PHP 处理图片的类实现代码
2009/10/23 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
javascript add event remove event
2008/04/07 Javascript
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
jquery高效反选具体实现
2013/05/05 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
2018/03/03 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
如何利用 JS 脚本实现网页全自动秒杀抢购功能
2020/10/12 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
JS实现简易日历效果
2021/01/25 Javascript
Python 自动化表单提交实例代码
2017/06/08 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
2019/08/13 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
Ajax和javascript的区别
2013/07/20 面试题
大学生职业生涯规划书模板
2014/01/03 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
担保书格式
2015/01/20 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
团队拓展训练心得体会
2016/01/12 职场文书