Tkinter制作简单的python编辑器
想要制作简单的python脚本编辑器,其中文字输入代码部分使用Tkinter中的Text控件即可实现。
但是问题是,如何实现高亮呢?参考python自带的编辑器:python27/vidle文件夹中的代码。
实现效果为:

其中主要思路就是在Text中每输入一行代码,都通过正则匹配,查找是不是需要高亮效果,道理很简单,但是问题就是在使用Text控件的时候,通过光标输入的时候,似乎不能找到光标对应的位置,所以,人家的编辑器代码中,提供了WidgetRedirector.py文件,其作用主要是解决控件的输入操作执行Tk库里面的insert,而跳过了Tkinter库对应Text类中的insert函数。
该类的作用就是使用register函数注册insert的函数funtion,当往Text输入时,调用了funtion,然后从这个funtion中,即可得到文字输入的位置,而原始的insert函数中,往Text书写的操作,是通过该文件中的OriginalCommand类实现的。
其中的
WidgetRedirector类和OriginalCommand类直接拷贝即可。
而颜色高亮主要在ColorDelegator.py文件中实现,可以使用其中的正则表达式。
实现Text高亮的部分为:
class Test(object):
def __init__(self,parent):
self.parent = parent
self.text = Text(self.parent)
self.text.pack()
self.text.focus_set()
self.redir = WidgetRedirector(self.text)
self.redir.insert = self.redir.register("insert", self.m_insert)
self.redir.delete = self.redir.register("delete", self.m_delete)
self.prog = prog self.tagdefs = {'COMMENT': {'foreground': '#dd0000', 'background': '#ffffff'}, 'DEFINITION': {'foreground': '#0000ff', 'background': '#ffffff'}, 'BUILTIN': {'foreground': '#900090', 'background': '#ffffff'}, 'hit': {'foreground': '#ffffff', 'background': '#000000'}, 'STRING': {'foreground': '#00aa00', 'background': '#ffffff'}, 'KEYWORD': {'foreground': '#ff7700', 'background': '#ffffff'}, 'ERROR': {'foreground': '#000000', 'background': '#ff7777'}, 'TODO': {'foreground': None, 'background': None}, 'SYNC': {'foreground': None, 'background': None}, 'BREAK': {'foreground': 'black', 'background': '#ffff55'}} for tag, cnf in self.tagdefs.items():
if cnf:
self.text.tag_configure(tag, **cnf) def m_delete(self, index1, index2=None):
index1 = self.text.index(index1)
self.redir.delete(index1, index2)
self.notify_range(index1,index1) def m_insert(self, index, chars, *args):
index = self.text.index(index)
self.redir.insert(index, chars, *args)
self.notify_range(index, index + "+%dc" % len(chars)) def notify_range(self, index1, index2=None):
first = index1[0]+'.0'
line = self.text.get(first, index2) for tag in self.tagdefs.keys():
self.text.tag_remove(tag, first, index2)
chars = line
m = self.prog.search(chars) while m:
for key, value in m.groupdict().items():
if value:
a, b = m.span(key)
self.text.tag_add(key,
first + "+%dc" % a,
first + "+%dc" % b) m = self.prog.search(chars, m.end())
由此即可完成简单的编辑器。
Tkinter制作简单的python编辑器的更多相关文章
- python使用wxPython创建一个简单的文本编辑器。
ubuntu下通过'sudo apt-get install python-wxtools'下载wxPython.load和save函数用于加载和保存文件内容,button通过Bind函数绑定这两个函 ...
- python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图
python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 # coding=utf-8 from openpyxl import load_workbook ...
- python制作简单excel统计报表2之操作excel的模块openpyxl简单用法
python制作简单excel统计报表2之操作excel的模块openpyxl简单用法 # coding=utf-8 from openpyxl import Workbook, load_workb ...
- Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证
Python tkinter 实现简单登陆注册 最终效果 开始界面 注册 登陆 源码 login.py # encoding=utf-8 from tkinter import * from ...
- python编辑器对比和推荐
python编辑器对比和推荐 我先给一个初步的表格吧,大家如果有什么意见,或有补充,欢迎提出.有些我没有用过,先不写了.以下是我使用过的python IDE: 除了PythonWin, Visua ...
- 转载 - Vim 的 Python 编辑器详细配置过程 (Based on Ubuntu 12.04 LTS)
出处:http://www.cnblogs.com/ifantastic/p/3185665.html Vim 的 Python 编辑器详细配置过程 (Based on Ubuntu 12.04 LT ...
- Unreal Engine 4 系列教程 Part 5:制作简单游戏
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- Unreal Engine 4 系列教程 Part 10:制作简单FPS游戏
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- python教程:用简单的Python编写Web应用程序
python现在已经成为很多程序员关注的编程语言之一,很多程序员也都开始弄python编程,并且很多时候都会用自己的操作来选择,而现在不管是程序员还是少儿编程,都会有python这门课,今天就和大家分 ...
随机推荐
- 训练赛第一场D题
解题报告:一开始不知道ATA的意思,后来才知道原来是转置矩阵乘以原来的矩阵.这题说起来比较麻烦就不说了,直接上代码: #include<cstdio> #include<cstrin ...
- erp前端项目总结
目录 一.项目目录(vue-cli2) 二.开发实践 (一) 权限 (二) 各组件间传递数据 (四) 路由 (七) 组织部门业务员三级联动 (八) 优化性能,手动绑定下拉框数据 (九) 验证 (十) ...
- UNIX环境高级编程 第8章 进程控制
本章是UNIX系统中进程控制原语,包括进程创建.执行新程序.进程终止,另外还会对进程的属性加以说明,包括进程ID.实际/有效用户ID. 进程标识 每个进程某一时刻在系统中都是独一无二的,它们之间是用一 ...
- 最长上升子序列O(nlogn) 要强的T^T(2358)
题目来源:http://www.fjutacm.com/Problem.jsp?pid=2358 要强的T^T TimeLimit:1000MS MemoryLimit:65536K 64-bit ...
- 深度解析:python之浅拷贝与深拷贝
深度解析python之浅拷贝与深拷贝 本文包括知识点: 1.copy与deepcopy 2.可变类型与不可变类型 1.copy与deepcopy 在日常python编码过程中,经常会遇见变量的赋值.这 ...
- java基础48 IO流技术(序列流)
本文知识点目录: 1.SequenceInputStream序列流的步骤 2.实例 3.附录(音乐的切割与合并) 1.SequenceInputStream序列流的步骤 1.找到目标文件 ...
- windows系统 安装MongoDB
1.下载 官网下载地址:https://www.mongodb.com/download-center#community 2.配置MongoDB a.在e:\MongoDB(可随意起)下面建一个da ...
- AdvStringGrid 滚动条问题
1.默认水平方向 滚动条是 小的 滚动的时候 数据会随着滚动 而 滚动的. 2.默认垂直方向 滚动条是 小的 滚动的时候 数据不会随着滚动 而滚动的.ScrollSynch := True; 垂直方向 ...
- (三)HttpClient 抓取图片
第一节: HttpClient 抓取图片 这里pom.xml需要用到io输入输出: <dependency> <groupId>commons-io</groupId&g ...
- 深度学习国外课程资料(Deep Learning for Self-Driving Cars)+(Deep Reinforcement Learning and Control )
MIT(Deep Learning for Self-Driving Cars) CMU(Deep Reinforcement Learning and Control ) 参考网址: 1 Deep ...