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的shutil模块中文件的复制操作函数详解
Jul 05 Python
pandas 数据归一化以及行删除例程的方法
Nov 10 Python
使用Python为中秋节绘制一块美味的月饼
Sep 11 Python
Python django搭建layui提交表单,表格,图标的实例
Nov 18 Python
使用pyqt5 tablewidget 单元格设置正则表达式
Dec 13 Python
python 串口读取+存储+输出处理实例
Dec 26 Python
python3爬取torrent种子链接实例
Jan 16 Python
python实现交并比IOU教程
Apr 16 Python
Python包资源下载路径报404解决方案
Nov 05 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
Jan 05 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
Feb 24 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
Aug 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
桌面中心(二)数据库写入
2006/10/09 PHP
php 定义404页面的实现代码
2012/11/19 PHP
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
JavaScript中使用document.write向页面输出内容实例
2014/10/16 Javascript
javascript定时器完整实例
2015/02/10 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
vue学习笔记之指令v-text && v-html && v-bind详解
2017/05/12 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
webpack打包js的方法
2018/03/12 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
python 解析html之BeautifulSoup
2009/07/07 Python
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
Python中的ConfigParser模块使用详解
2015/05/04 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
jupyter notebook实现显示行号
2020/04/13 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
2014年图书管理员工作总结
2014/12/01 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python