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 uuid模块使用实例
Apr 08 Python
在Python中操作日期和时间之gmtime()方法的使用
May 22 Python
Python 转义字符详细介绍
Mar 21 Python
python下解压缩zip文件并删除文件的实例
Apr 24 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
Python2实现的图片文本识别功能详解
Jul 11 Python
python 使用pandas计算累积求和的方法
Feb 08 Python
详解python算法之冒泡排序
Mar 05 Python
python实现抖音点赞功能
Apr 07 Python
python opencv图片编码为h264文件的实例
Dec 12 Python
如何基于Python实现电子邮件的发送
Dec 16 Python
pandas之分组groupby()的使用整理与总结
Jun 18 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中in_array函数用法分析
2014/11/15 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
javascript 强制刷新页面的实现代码
2009/12/13 Javascript
JavaScript实现拼音排序的方法
2012/11/20 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
Javascript监视变量变化的方法
2015/06/09 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
React 组件间的通信示例
2018/06/14 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
python简单判断序列是否为空的方法
2015/06/30 Python
python实现文件路径和url相互转换的方法
2015/07/06 Python
python求最大连续子数组的和
2018/07/07 Python
python七夕浪漫表白源码
2019/04/05 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
教师党员整改措施
2014/10/24 职场文书
2015年班干部工作总结
2015/04/29 职场文书
2015年社区反邪教工作总结
2015/10/14 职场文书
践行三严三实心得体会(2016推荐篇)
2016/01/06 职场文书
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL
使用python绘制分组对比柱状图
2022/04/21 Python