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中selenium实现文件上传所有方法整理总结
Apr 01 Python
机器学习python实战之手写数字识别
Nov 01 Python
python的socket编程入门
Jan 29 Python
关于Tensorflow中的tf.train.batch函数的使用
Apr 24 Python
python 将数据保存为excel的xls格式(实例讲解)
May 03 Python
Python爬虫包BeautifulSoup实例(三)
Jun 17 Python
python使用tomorrow实现多线程的例子
Jul 20 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 Python
Python使用文件操作实现一个XX信息管理系统的示例
Jul 02 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
Python爬取某拍短视频
Jun 11 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 中的str_replace 函数总结
2007/04/27 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
PHP之autoload运行机制实例分析
2014/08/28 PHP
smarty中js的调用方法示例
2014/10/27 PHP
php写入mysql中文乱码的实例解决方法
2019/09/17 PHP
Z-Blog中用到的js代码
2007/03/15 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
js中的this关键字详解
2013/09/25 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
直接拿来用的15个jQuery代码片段
2015/09/23 Javascript
深入探讨前端框架react
2015/12/09 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
基于打包工具Webpack进行项目开发实例
2018/05/29 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
2018/12/09 Javascript
JavaScript多种图形实现代码实例
2020/06/28 Javascript
Python lambda和Python def区别分析
2014/11/30 Python
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
python地震数据可视化详解
2019/06/18 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
美工的岗位职责
2013/11/14 职场文书
会计电算化专业毕业生推荐信
2013/12/24 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
2015年元旦演讲稿
2014/09/12 职场文书
爱心捐助活动总结
2015/05/09 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL