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实现检测服务器是否可以ping通的2种方法
Jan 01 Python
简介Django中内置的一些中间件
Jul 24 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
Python Socket编程详细介绍
Mar 23 Python
python实现折半查找和归并排序算法
Apr 14 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
Nov 21 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
May 09 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
Python一键安装全部依赖包的方法
Aug 12 Python
python支持多继承吗
Jun 19 Python
仅用几行Python代码就能复制她的U盘文件?
Jun 26 Python
OpenCV实现常见的四种图像几何变换
Apr 01 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
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
PHP安装threads多线程扩展基础教程
2015/11/17 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
实例讲解php将字符串输出到HTML
2019/01/27 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
JS 强制设为首页的代码
2009/01/31 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
IE浏览器不支持getElementsByClassName的解决方法
2014/08/27 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
js自定义回调函数
2015/12/13 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
浅析为什么a="abc" 不等于 a=new String("abc")
2017/10/25 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
Python的Django框架中的表单处理示例
2015/07/17 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
python3 map函数和filter函数详解
2019/08/26 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
使用 Python 遍历目录树的方法
2020/02/29 Python
python图片指定区域替换img.paste函数的使用
2020/04/09 Python
浅析Python 字符编码与文件处理
2020/09/24 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
美国保健品专家:Life Extension
2018/05/04 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
教师自我评价范例
2013/09/24 职场文书
自荐信结尾
2013/10/27 职场文书
工程师岗位职责规定
2014/02/26 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
Python循环之while无限迭代
2022/04/30 Python