python基于Tkinter库实现简单文本编辑器实例


Posted in Python onMay 05, 2015

本文实例讲述了python基于Tkinter库实现简单文本编辑器的方法。分享给大家供大家参考。具体实现方法如下:

## {{{ http://code.activestate.com/recipes/578568/ (r1)
from Tkinter import * 
from tkSimpleDialog import askstring
from tkFileDialog  import asksaveasfilename
from tkMessageBox import askokcancel     
class Quitter(Frame):            
  def __init__(self, parent=None):     
    Frame.__init__(self, parent)
    self.pack()
    widget = Button(self, text='Quit', command=self.quit)
    widget.pack(expand=YES, fill=BOTH, side=LEFT)
  def quit(self):
    ans = askokcancel('Verify exit', "Really quit?")
    if ans: Frame.quit(self)
class ScrolledText(Frame):
  def __init__(self, parent=None, text='', file=None):
    Frame.__init__(self, parent)
    self.pack(expand=YES, fill=BOTH)        
    self.makewidgets()
    self.settext(text, file)
  def makewidgets(self):
    sbar = Scrollbar(self)
    text = Text(self, relief=SUNKEN)
    sbar.config(command=text.yview)         
    text.config(yscrollcommand=sbar.set)      
    sbar.pack(side=RIGHT, fill=Y)          
    text.pack(side=LEFT, expand=YES, fill=BOTH)   
    self.text = text
  def settext(self, text='', file=None):
    if file: 
      text = open(file, 'r').read()
    self.text.delete('1.0', END)          
    self.text.insert('1.0', text)         
    self.text.mark_set(INSERT, '1.0')       
    self.text.focus()                
  def gettext(self):                
    return self.text.get('1.0', END+'-1c')     
class SimpleEditor(ScrolledText):            
  def __init__(self, parent=None, file=None): 
    frm = Frame(parent)
    frm.pack(fill=X)
    Button(frm, text='Save', command=self.onSave).pack(side=LEFT)
    Button(frm, text='Cut',  command=self.onCut).pack(side=LEFT)
    Button(frm, text='Paste', command=self.onPaste).pack(side=LEFT)
    Button(frm, text='Find', command=self.onFind).pack(side=LEFT)
    Quitter(frm).pack(side=LEFT)
    ScrolledText.__init__(self, parent, file=file) 
    self.text.config(font=('courier', 9, 'normal'))
  def onSave(self):
    filename = asksaveasfilename()
    if filename:
      alltext = self.gettext()           
      open(filename, 'w').write(alltext)     
  def onCut(self):
    text = self.text.get(SEL_FIRST, SEL_LAST)    
    self.text.delete(SEL_FIRST, SEL_LAST)      
    self.clipboard_clear()       
    self.clipboard_append(text)
  def onPaste(self):                  
    try:
      text = self.selection_get(selection='CLIPBOARD')
      self.text.insert(INSERT, text)
    except TclError:
      pass                   
  def onFind(self):
    target = askstring('SimpleEditor', 'Search String?')
    if target:
      where = self.text.search(target, INSERT, END) 
      if where:                  
        print where
        pastit = where + ('+%dc' % len(target))  
        #self.text.tag_remove(SEL, '1.0', END)   
        self.text.tag_add(SEL, where, pastit)   
        self.text.mark_set(INSERT, pastit)     
        self.text.see(INSERT)          
        self.text.focus()            
if __name__ == '__main__':
  try:
    SimpleEditor(file=sys.argv[1]).mainloop()  
  except IndexError:
    SimpleEditor().mainloop()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
利用Python绘制数据的瀑布图的教程
Apr 07 Python
Python标准库defaultdict模块使用示例
Apr 28 Python
浅谈Django REST Framework限速
Dec 12 Python
python-str,list,set间的转换实例
Jun 27 Python
pandas去除重复列的实现方法
Jan 29 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
Jul 04 Python
python pycharm的安装及其使用
Oct 11 Python
VSCode中自动为Python文件添加头部注释
Nov 14 Python
keras中的backend.clip用法
May 22 Python
Python pip安装第三方库实现过程解析
Jul 09 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 Python
python实现的简单窗口倒计时界面实例
May 05 #Python
给Python中的MySQLdb模块添加超时功能的教程
May 05 #Python
用Python实现一个简单的多线程TCP服务器的教程
May 05 #Python
简单介绍Python中的try和finally和with方法
May 05 #Python
python中的闭包用法实例详解
May 05 #Python
Python闭包实现计数器的方法
May 05 #Python
深入探究Python中变量的拷贝和作用域问题
May 05 #Python
You might like
jQuery EasyUI API 中文文档 - DateBox日期框
2011/10/15 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
php微信公众号开发模式详解
2016/11/28 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
Javascript图像处理—为矩阵添加常用方法
2012/12/27 Javascript
借助javascript代码判断网页是静态还是伪静态
2014/05/05 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
angularjs之$timeout指令详解
2017/06/13 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
详解weex默认webpack.config.js改造
2018/01/08 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
Python中optparser库用法实例详解
2018/01/26 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
详解Html5页面实现下载文件(apk、txt等)的三种方式
2018/10/22 HTML / CSS
美国现代家具购物网站:LexMod
2019/01/09 全球购物
Timberland德国官网:靴子、鞋子、衣服、夹克及配件
2019/12/10 全球购物
外语学院毕业生的自我鉴定
2013/11/28 职场文书
管理工程专业求职信
2014/08/10 职场文书
Python 循环读取数据内存不足的解决方案
2021/05/25 Python
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫