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 02 Python
浅述python中argsort()函数的实例用法
Mar 30 Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 Python
Python OS模块实例详解
Apr 15 Python
python实现动态数组的示例代码
Jul 15 Python
Python协程 yield与协程greenlet简单用法示例
Nov 22 Python
python实现从wind导入数据
Dec 03 Python
tensorflow tf.train.batch之数据批量读取方式
Jan 20 Python
python 子类调用父类的构造函数实例
Mar 12 Python
Python实现AES加密,解密的两种方法
Oct 03 Python
Matplotlib中rcParams使用方法
Jan 05 Python
基于flask实现五子棋小游戏
May 25 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静态新闻列表自动生成代码
2007/06/14 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
php实现微信公众号创建自定义菜单功能的实例代码
2019/06/11 PHP
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
详解在React里使用"Vuex"
2018/04/02 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
python递归计算N!的方法
2015/05/05 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
python制作图片缩略图
2019/04/30 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
营销与策划应届生求职信
2013/11/04 职场文书
大学生职业生涯设计书
2014/01/02 职场文书
旅游专业职业生涯规划范文
2014/01/13 职场文书
安全教育月活动总结
2014/05/05 职场文书
党校毕业心得体会
2014/09/13 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
建议书范文
2015/02/05 职场文书
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript