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将mdb数据库文件导入postgresql数据库示例
Feb 17 Python
简单介绍Python中的try和finally和with方法
May 05 Python
详解JavaScript编程中的window与window.screen对象
Oct 26 Python
Python学习笔记整理3之输入输出、python eval函数
Dec 14 Python
Python获取指定文件夹下的文件名的方法
Feb 06 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
May 25 Python
对pandas中两种数据类型Series和DataFrame的区别详解
Nov 12 Python
python实现五子棋小程序
Jun 18 Python
通过cmd进入python的实例操作
Jun 26 Python
Django文件存储 默认存储系统解析
Aug 02 Python
calendar在python3时间中常用函数举例详解
Nov 18 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 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
《魔兽争霸3:重制版》翻车了?你想要的我们都没有
2019/11/07 魔兽争霸
php中数组首字符过滤功能代码
2012/07/31 PHP
通过php删除xml文档内容的方法
2015/01/23 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
Node.js DES加密的简单实现
2016/07/07 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
JavaScript计算正方形面积
2019/11/26 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
ES6中的Javascript解构的实现
2020/10/30 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
详解python3中zipfile模块用法
2018/06/18 Python
Python如何在DataFrame增加数值
2020/02/14 Python
Pytorch转onnx、torchscript方式
2020/05/25 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
白宫黑市官网:White House Black Market
2016/11/17 全球购物
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
PyQt 如何创建自定义QWidget
2021/03/24 Python
大学运动会入场词
2014/02/22 职场文书
小学三年级学生评语
2014/04/22 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
详解Java七大阻塞队列之SynchronousQueue
2021/09/04 Java/Android