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之从格式化表达式到方法
Sep 28 Python
Python中time模块和datetime模块的用法示例
Feb 28 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
Mar 11 Python
解决python matplotlib imshow无法显示的问题
May 24 Python
Python中偏函数用法示例
Jun 07 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
VSCode Python开发环境配置的详细步骤
Feb 22 Python
python多进程读图提取特征存npy
May 21 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
Sep 06 Python
python实现加密的方式总结
Jan 19 Python
Python基于requests库爬取网站信息
Mar 02 Python
查看jupyter notebook每个单元格运行时间实例
Apr 22 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
使用Sphinx对索引进行搜索
2013/06/25 PHP
php实现粘贴截图并完成上传功能
2015/05/17 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
javascript学习笔记--数字格式类型
2014/05/22 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
基于JavaScript FileReader上传图片显示本地链接
2016/05/27 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
js中bool值的转换及“&&”、“||”、 “!!”详解
2017/12/21 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
node中modules.exports与exports导出的区别
2018/06/08 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
python定时器使用示例分享
2014/02/16 Python
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
python代码实现TSNE降维数据可视化教程
2020/02/28 Python
Python txt文件如何转换成字典
2020/11/03 Python
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
英国计算机商店:Technextday
2019/12/28 全球购物
读群众路线心得体会
2014/03/07 职场文书
志愿者活动总结
2014/04/28 职场文书
中文专业自荐书
2014/06/29 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
大学生学期个人总结
2015/02/12 职场文书
中秋联欢会主持词
2015/07/04 职场文书
2015年中秋节主持词
2015/07/30 职场文书