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实现远程调用MetaSploit的方法
Aug 22 Python
深入理解Python中字典的键的使用
Aug 19 Python
Python算法之图的遍历
Nov 16 Python
基于Python List的赋值方法
Jun 23 Python
python selenium自动上传有赞单号的操作方法
Jul 05 Python
python频繁写入文件时提速的方法
Jun 26 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 Python
如何搭建pytorch环境的方法步骤
May 06 Python
Python 如何操作 SQLite 数据库
Aug 17 Python
pandas数据分组groupby()和统计函数agg()的使用
Mar 04 Python
Python实现随机生成迷宫并自动寻路
Jun 13 Python
Flask使用SQLAlchemy实现持久化数据
Jul 16 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中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
PHP程序员的技术成长规划
2016/03/25 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
Jquery图片滚动与幻灯片的实例代码
2013/04/08 Javascript
js和jquery对dom节点的操作(创建/追加)
2013/04/21 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
详解AngularJS中的filter过滤器用法
2016/01/04 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
详解用node编写自己的cli工具
2017/05/23 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
Python随机生成数模块random使用实例
2015/04/13 Python
Python输出各行命令详解
2018/02/01 Python
Python基于requests库爬取网站信息
2020/03/02 Python
Python递归函数特点及原理解析
2020/03/04 Python
如何基于Python按行合并两个txt
2020/11/03 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
Linux如何压缩可执行文件
2013/10/21 面试题
成教自我鉴定
2013/10/27 职场文书
卫校护理专业毕业生求职信
2013/11/26 职场文书
考试作弊被抓检讨书
2014/01/10 职场文书
检察官就职演讲稿
2014/01/13 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
MySQL创建管理KEY分区
2022/04/13 MySQL