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求解水仙花数的方法
May 11 Python
Python中生成Epoch的方法
Apr 26 Python
python事件驱动event实现详解
Nov 21 Python
利用python GDAL库读写geotiff格式的遥感影像方法
Nov 29 Python
Python Numpy 实现交换两行和两列的方法
Jun 26 Python
Django缓存系统实现过程解析
Aug 02 Python
Python学习笔记之For循环用法详解
Aug 14 Python
wxPython实现整点报时
Nov 18 Python
详解用Python爬虫获取百度企业信用中企业基本信息
Jul 02 Python
Python获取浏览器窗口句柄过程解析
Jul 25 Python
python生成随机数、随机字符、随机字符串
Apr 06 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 Session存储到Redis的方法
2013/11/04 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
node.js中的require使用详解
2014/12/15 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
2016/05/30 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
详解用node.js实现简单的反向代理
2017/06/26 Javascript
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
2017/09/30 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
python求pi的方法
2014/10/08 Python
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
Python从列表推导到zip()函数的5种技巧总结
2019/10/23 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
Laravel中Kafka的使用详解
2021/03/24 PHP
缴纳养老保险的证明
2014/01/10 职场文书
安全标语大全
2014/06/10 职场文书
企业环保标语
2014/06/10 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
信息技术研修心得体会
2016/01/08 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
MySQL入门命令之函数-单行函数-流程控制函数
2021/04/05 MySQL
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL
Nginx利用Logrotate实现日志分割
2022/05/20 Servers
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS