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之类的细节
Oct 13 Python
利用Python实现命令行版的火车票查看器
Aug 05 Python
Python 25行代码实现的RSA算法详解
Apr 10 Python
Python实现八皇后问题示例代码
Dec 09 Python
Python模块的定义,模块的导入,__name__用法实例分析
Jan 07 Python
Django 博客实现简单的全文搜索的示例代码
Feb 17 Python
python实现最速下降法
Mar 24 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
用 python 进行微信好友信息分析
Nov 28 Python
Python中可变和不可变对象的深入讲解
Aug 02 Python
python使用torch随机初始化参数
Mar 22 Python
Python保存并浏览用户的历史记录
Apr 29 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生成扭曲及旋转的验证码图片
2013/06/07 PHP
PHP输出缓存ob系列函数详解
2014/03/11 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
CodeIgniter框架验证码类库文件与用法示例
2017/03/18 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
keep-alive保持组件状态的方法
2020/12/02 Javascript
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
电话销售经理岗位职责
2013/12/07 职场文书
学校消防演习方案
2014/02/19 职场文书
2014年党课学习材料
2014/05/11 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书
2015年公务员工作总结
2015/04/24 职场文书
学生病假条范文
2015/08/17 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书
辞职信怎么写?
2019/05/21 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript