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爬虫之HTTP异常处理
Nov 05 Python
Python3处理文件中每个词的方法
May 22 Python
用Python3创建httpServer的简单方法
Jun 04 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
Python图像处理PIL各模块详细介绍(推荐)
Jul 17 Python
Django如何简单快速实现PUT、DELETE方法
Jul 24 Python
详解python中groupby函数通俗易懂
May 14 Python
python怎么提高计算速度
Jun 11 Python
python如何做代码性能分析
Apr 26 Python
Django与数据库交互的实现
Jun 03 Python
Python图片验证码降噪和8邻域降噪
Aug 30 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
Aug 14 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&mysql(一)
2006/10/09 PHP
php foreach 使用&(与运算符)引用赋值要注意的问题
2010/02/16 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
js 上传文件预览的简单实例
2016/08/16 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
为Python的Tornado框架配置使用Jinja2模板引擎的方法
2016/06/30 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
python学习开发mock接口
2019/04/28 Python
Python对HTML转义字符进行反转义的实现方法
2019/04/28 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
PyTorch的torch.cat用法
2020/06/28 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
Linux的主要特性
2014/10/06 面试题
医学求职自荐信
2014/06/21 职场文书
借条如何写
2015/05/26 职场文书
合同范本之电脑出租
2019/08/13 职场文书
python实现图片九宫格分割的示例
2021/04/25 Python
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL