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基本语法经典教程
Mar 11 Python
python对excel文档去重及求和的实例
Apr 18 Python
Python hashlib模块用法实例分析
Jun 12 Python
Python中创建二维数组
Oct 17 Python
python利用插值法对折线进行平滑曲线处理
Dec 25 Python
python实现中文文本分句的例子
Jul 15 Python
pytest中文文档之编写断言
Sep 12 Python
Python for循环与getitem的关系详解
Jan 02 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 Python
Python request post上传文件常见要点
Nov 20 Python
python 解决微分方程的操作(数值解法)
May 26 Python
python flask开发的简单基金查询工具
Jun 02 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
javascript Prototype 对象扩展
2009/05/15 Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
React Native之ListView实现九宫格效果的示例
2017/08/02 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
理解Python中函数的参数
2015/04/27 Python
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
python和shell获取文本内容的方法
2018/06/05 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
Python控制Firefox方法总结
2019/06/03 Python
关于pytorch中网络loss传播和参数更新的理解
2019/08/20 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
python 实现简易的记事本
2020/11/30 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
岗位竞聘演讲稿
2014/01/10 职场文书
京剧自荐信
2014/01/26 职场文书
社团招新策划书
2014/02/04 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
爱与责任演讲稿
2014/05/20 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python