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实现PS图像抽象画风效果的方法
Jan 23 Python
python3个性签名设计实现代码
Jun 19 Python
基于Python实现定时自动给微信好友发送天气预报
Oct 25 Python
python的继承知识点总结
Dec 10 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
解决pycharm的Python console不能调试当前程序的问题
Jan 20 Python
Python3实现的旋转矩阵图像算法示例
Apr 03 Python
在Django admin中编辑ManyToManyField的实现方法
Aug 09 Python
python通过opencv实现图片裁剪原理解析
Jan 19 Python
tensorflow之并行读入数据详解
Feb 05 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 Python
Python实现疫情地图可视化
Feb 05 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 中英文语言转换类
2011/09/07 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
jQuery实现的模仿雨滴下落动画效果
2018/12/11 jQuery
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
Python中使用HTMLParser解析html实例
2015/02/08 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
什么是方法的重载
2013/06/24 面试题
什么是servlet链?
2014/07/13 面试题
大学生咖啡店创业计划书
2014/01/21 职场文书
《望洞庭》教学反思
2014/02/16 职场文书
我的中国梦演讲稿1000字
2014/08/19 职场文书
装饰公司活动策划方案
2014/08/23 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
五年级作文之想象作文
2019/10/30 职场文书
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL