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调用cmd命令行制作刷博器
Jan 13 Python
Python分支结构(switch)操作简介
Jan 17 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
Jan 18 Python
django1.11.1 models 数据库同步方法
May 30 Python
python仿evething的文件搜索器实例代码
May 13 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
python openpyxl模块的使用详解
Feb 25 Python
python面向对象版学生信息管理系统
Jun 24 Python
python接口测试返回数据为字典取值方式
Feb 12 Python
python中pd.cut()与pd.qcut()的对比及示例
Jun 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
PHP开发大型项目的一点经验
2006/10/09 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
php文件缓存类汇总
2014/11/21 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
Aster vs KG BO3 第一场2.19
2021/03/10 DOTA
js变量以及其作用域详解
2020/07/18 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
JS作用域链详解
2017/06/26 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
python编程实现归并排序
2017/04/14 Python
Django多数据库的实现过程详解
2019/08/01 Python
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
英国手工制作的现代与经典的沙发和床:Love Your Home
2020/09/26 全球购物
Ref与out有什么不同
2012/11/24 面试题
大学应届生求职简历的自我评价
2013/10/08 职场文书
自荐信怎么写好
2013/11/11 职场文书
商场中秋节广播稿
2014/01/17 职场文书
安全生产活动月方案
2014/03/09 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2014年维修工作总结
2014/11/22 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
2015年元宵节活动总结
2015/02/06 职场文书