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 相关文章推荐
Pyramid Mako模板引入helper对象的步骤方法
Nov 27 Python
Python使用代理抓取网站图片(多线程)
Mar 14 Python
Django静态资源URL STATIC_ROOT的配置方法
Nov 08 Python
Python中的包和模块实例
Nov 22 Python
Python实现遍历目录的方法【测试可用】
Mar 22 Python
python模块之time模块(实例讲解)
Sep 13 Python
python微信跳一跳系列之色块轮廓定位棋盘
Feb 26 Python
关于python多重赋值的小问题
Apr 17 Python
python远程连接MySQL数据库
Apr 19 Python
Django中自定义admin Xadmin的实现代码
Aug 09 Python
python 插入日期数据到Oracle实例
Mar 02 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
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
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
php中static和const关键字用法分析
2016/12/07 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
2017/03/12 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
兼容IE和FF的图片上传前预览js代码
2013/05/28 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
2013/08/23 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
express异步函数异常捕获示例详解
2020/11/30 Javascript
用python 制作图片转pdf工具
2015/01/30 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
python 定时修改数据库的示例代码
2018/04/08 Python
python中的变量如何开辟内存
2018/06/26 Python
python读取各种文件数据方法解析
2018/12/29 Python
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
品学兼优的大学生自我评价
2013/09/20 职场文书
建筑毕业生自我鉴定
2013/10/18 职场文书
如何写好建议书
2014/03/13 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
计算机系本科生求职信
2014/05/31 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
单位员工收入证明样本
2014/10/09 职场文书
中学生打架检讨书
2014/10/13 职场文书
高三毕业感言
2015/07/30 职场文书
简短的36句中秋节祝福信息语句
2019/09/09 职场文书
Win11软件图标固定到任务栏
2022/04/19 数码科技
Docker安装MySql8并远程访问的实现
2022/07/07 Servers