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目录操作之python遍历文件夹后将结果存储为xml
Jan 27 Python
Python使用代理抓取网站图片(多线程)
Mar 14 Python
python3使用urllib模块制作网络爬虫
Apr 08 Python
Python中Collections模块的Counter容器类使用教程
May 31 Python
关于Python中Inf与Nan的判断问题详解
Feb 08 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
Feb 28 Python
python实现发送form-data数据的方法详解
Sep 27 Python
Python any()函数的使用方法
Oct 28 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 Python
python使用matplotlib绘制折线图的示例代码
Sep 22 Python
Django中如何用xlwt生成表格的方法步骤
Jan 31 Python
python 列表推导和生成器表达式的使用
Feb 01 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简单实现MVC
2015/02/05 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
Python中扩展包的安装方法详解
2017/06/14 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
python实现超市商品销售管理系统
2019/11/22 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
加拿大时尚少女服装品牌:Garage
2016/10/10 全球购物
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
类的返射机制中的包及核心类
2016/09/12 面试题
在校硕士自我鉴定
2014/01/23 职场文书
电工技术比武方案
2014/05/11 职场文书
离婚协议书怎么写
2014/09/12 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
高一作文之暖冬
2019/11/09 职场文书
Python可变集合和不可变集合的构造方法大全
2021/12/06 Python