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中IPYTHON入门实例
May 11 Python
python数据批量写入ScrolledText的优化方法
Oct 11 Python
Python操作Excel插入删除行的方法
Dec 10 Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 Python
django ModelForm修改显示缩略图 imagefield类型的实例
Jul 28 Python
python异常触发及自定义异常类解析
Aug 06 Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 Python
python安装和pycharm环境搭建设置方法
May 27 Python
Python如何用wx模块创建文本编辑器
Jun 07 Python
Python如何执行系统命令
Sep 23 Python
使用Python实现音频双通道分离
Dec 25 Python
Python列表删除重复元素与图像相似度判断及删除实例代码
May 07 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
一个简单计数器的源代码
2006/10/09 PHP
PHP 上传文件大小限制
2009/07/05 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
JS(JQuery)操作Array的相关方法介绍
2014/02/11 Javascript
js toFixed()方法的重写实现精度的统一
2014/03/06 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
Node.js使用gm拼装sprite图片
2017/07/04 Javascript
javascript中的replace函数(带注释demo)
2018/01/07 Javascript
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
python self,cls,decorator的理解
2009/07/13 Python
Python中__init__和__new__的区别详解
2014/07/09 Python
Python基类函数的重载与调用实例分析
2015/01/12 Python
Python 专题一 函数的基础知识
2017/03/16 Python
Python实现Linux中的du命令
2017/06/12 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
python爬虫实现POST request payload形式的请求
2020/04/30 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
大学生工作推荐信范文
2013/12/02 职场文书
历史专业个人求职信分享
2013/12/20 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
投资意向书
2014/07/30 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
初中英语教学随笔
2015/08/15 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL
Django框架中模型的用法
2022/06/10 Python