【转】tkinter实现的文本编辑器

此代码是看完如下教学视频实现的,所以算是【转载】吧:

效果:

                                                   

代码:

  1 # -*- encoding: utf8 -*-
  2 #python 2.7
  3 from Tkinter import *
  4 from tkMessageBox import *
  5 from tkFileDialog import *
  6 import os
  7
  8
  9 filename = ‘‘
 10
 11 def author():
 12     showinfo(‘author:‘,‘sundy‘)
 13
 14 def about():
 15     showinfo(‘Copyright:‘,‘sundy‘)
 16
 17 def openfile():
 18     global filename
 19     filename = askopenfilename(defaultextension = ‘.txt‘)
 20     if filename == ‘‘:
 21         filename = None
 22     else:
 23         root.title(‘FileName:‘+os.path.basename(filename))
 24         textPad.delete(1.0,END)
 25         f = open(filename,‘r‘)
 26         textPad.insert(1.0,f.read())
 27         f.close()
 28
 29 def new():
 30     global filename
 31     root.title(‘未命名文件‘)
 32     filename = None
 33     textPad.delete(1.0,END)
 34
 35 def save():
 36     global filename
 37     try:
 38         f = open(filename,‘w‘)
 39         msg = textPad.get(1.0,END)
 40         f.write(msg)
 41         f.close()
 42     except:
 43         saveas()
 44
 45
 46 def saveas():
 47     f = asksaveasfilename(initialfile= ‘未命名.txt‘, defaultextension=‘.txt‘)
 48     global filename
 49     filename = f
 50     fh = open(f,‘w‘)
 51     msg = textPad.get(1.0,END)
 52     fh.write(msg)
 53     fh.close()
 54     root.title(‘FileName:‘+os.path.basename(f))
 55
 56 def cut():
 57     textPad.event_generate(‘<<Cut>>‘)
 58
 59 def copy():
 60     textPad.event_generate(‘<<Copy>>‘)
 61
 62 def paste():
 63     textPad.event_generate(‘<<Paste>>‘)
 64
 65 def redo():
 66     textPad.event_generate(‘<<Redo>>‘)
 67
 68 def undo():
 69     textPad.event_generate(‘<<Undo>>‘)
 70
 71 def selectAll():
 72     textPad.tag_add(‘sel‘,‘1.0‘,END)
 73
 74 def search():
 75     def dosearch():
 76         myentry = entry1.get()             #获取查找的内容--string型
 77         whatever = str(textPad.get(1.0,END))
 78         # print textPad.index(‘zxc‘)
 79         # print myentry
 80         # print "%d个"%(whatever.count(myentry))    #计算substr在S中出现的次数
 81         showinfo("查找结果:","you searched %s, there are %d in the text"%(myentry,whatever.count(myentry)))
 82         # print whatever.find(myentry)
 83
 84         # teIndex = textPad.index(myentry)
 85         # textPad.linestart(teIndex)
 86         # textPad.mark_set(‘insert‘, teIndex)
 87         # textPad.mark_set(myentry,CURRENT + ‘+5c‘)
 88         # textPad.mark_set(myentry,CURRENT + ‘ wordstart‘)
 89     topsearch = Toplevel(root)
 90     topsearch.geometry(‘300x30+200+250‘)
 91     label1 = Label(topsearch,text=‘Find‘)
 92     label1.grid(row=0, column=0,padx=5)
 93     entry1 = Entry(topsearch,width=20)
 94     entry1.grid(row=0, column=1,padx=5)
 95     button1 = Button(topsearch,text=‘查找‘,command=dosearch)
 96     button1.grid(row=0, column=2)
 97
 98
 99 root = Tk()
100 root.title(‘Sundy Node‘)
101 root.geometry("800x500+100+100")
102
103 #Create Menu
104 menubar = Menu(root)
105 root.config(menu = menubar)
106
107 filemenu = Menu(menubar)
108 filemenu.add_command(label=‘新建‘, accelerator=‘Ctrl + N‘, command= new)
109 filemenu.add_command(label=‘打开‘, accelerator=‘Ctrl + O‘,command = openfile)
110 filemenu.add_command(label=‘保存‘, accelerator=‘Ctrl + S‘, command=save)
111 filemenu.add_command(label=‘另存为‘, accelerator=‘Ctrl + Shift + S‘,command=saveas)
112 menubar.add_cascade(label=‘文件‘,menu=filemenu)
113
114 editmenu = Menu(menubar)
115 editmenu.add_command(label=‘撤销‘, accelerator=‘Ctrl + Z‘, command=undo)
116 editmenu.add_command(label=‘重做‘, accelerator=‘Ctrl + y‘, command=redo)
117 editmenu.add_separator()
118 editmenu.add_command(label = "剪切",accelerator = "Ctrl + X",command=cut)
119 editmenu.add_command(label = "复制",accelerator = "Ctrl + C", command=copy)
120 editmenu.add_command(label = "粘贴",accelerator = "Ctrl + V", command= paste)
121 editmenu.add_separator()
122 editmenu.add_command(label = "查找",accelerator = "Ctrl + F", command=search)
123 editmenu.add_command(label = "全选",accelerator = "Ctrl + A", command= selectAll)
124 menubar.add_cascade(label = "操作",menu = editmenu)
125 aboutmenu = Menu(menubar)
126 aboutmenu.add_command(label = "作者", command=author)
127 aboutmenu.add_command(label = "关于", command = about)
128 menubar.add_cascade(label = "about",menu=aboutmenu)
129
130 #toolbar
131 toolbar = Frame(root, height=25,bg=‘grey‘)
132 shortButton = Button(toolbar, text=‘打开‘,command = openfile)
133 shortButton.pack(side=LEFT, padx=5, pady=5)
134
135 shortButton = Button(toolbar, text=‘保存‘, command = save)
136 shortButton.pack(side=LEFT)
137 toolbar.pack(expand=NO,fill=X)
138
139 #Status Bar
140 status = Label(root, text=‘Ln20‘,bd=1, relief=SUNKEN,anchor=W)
141 status.pack(side=BOTTOM, fill=X)
142
143 #linenumber&text
144 lnlabel =Label(root, width=2, bg=‘antique white‘)
145 lnlabel.pack(side=LEFT, fill=Y)
146
147 textPad = Text(root, undo=True)
148 textPad.pack(expand=YES, fill=BOTH)
149
150 scroll = Scrollbar(textPad)
151 textPad.config(yscrollcommand= scroll.set)
152 scroll.config(command = textPad.yview)
153 scroll.pack(side=RIGHT,fill=Y)
154
155 root.mainloop()

推荐文档:http://effbot.org/tkinterbook/

*python2.7环境。。在python3.X中tkinter有改变,请注意!!

时间: 2024-08-10 20:44:45

【转】tkinter实现的文本编辑器的相关文章

tkinter实现的文本编辑器

效果:                                                     # -*- encoding: utf8 -*- #python 2.7 from Tkinter import * from tkMessageBox import * from tkFileDialog import * import os filename = '' def author(): showinfo('author:','sundy') def about(): sh

Python-tkinter实现简单的文本编辑器

利用tkinter实现简单的文本编辑器.创建一个简单的文本编辑器.可以用读文件的方式在一个文本域里显示一些文字供用户编辑. 当用户退出程序时(通过 QUIT 按钮)会询问用户是否保存所作的修改. (直接上代码~有注释~) 1 # -*- encoding: utf-8 -*- 2 ''' 3 @File : 简单文本编辑器.py 4 @Time : 2020/04/05 11:35:39 5 @Author : Konggu 6 @Desc : None 7 ''' 8 import os 9

Vim 和 Emacs 文本编辑器:你更喜欢哪个?

关于Linux的学习,请参考书籍<Linux就该这么学> 这可能是2016年,在许多开发人员和系统管理员之间,编辑器战争中仍然活得很好的. VIM(vi)或Emacs:两者都有很强的功能,当然,很多人使用别的文本编辑器,你喜欢哪个? 毫无疑问,这两个还是有很强的追随者:当我们被问及最喜欢的文本编辑器,自从去年vi出世,但很显然,辩论仍然很激烈. 哪个最适合你,可能很大取决于个人的喜好.你可能已经内置插件满足您的需求,也许在你开发的同时产生了一些强烈的感情. 因此,让我们知道你喜欢哪种文本编辑器

TinyMCE(富文本编辑器)

[转]TinyMCE(富文本编辑器)在Asp.Net中的使用方法 官网演示以及示例代码:https://www.tinymce.com/docs/demo/image-tools/ 转自:http://www.cnblogs.com/hahacjh/archive/2010/07/24/1784268.html TinyMCE 在Asp.Net中的使用方法其实挺简单的,从官方网站下载TinyMCE),然后将里面的jscripts目录拷到你的网站目录 假设你的aspx页面中某一个地方需要用到编辑器

[Linux学习笔记] Linux文本编辑器Vim/Vi

文本编辑器Vim: Vim/Vi是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器. 它的作用是建立.编辑.显示文本文件. Vim/Vi没有菜单,只有命令. 插入命令 命令 作用 a 在光标后附加文本 A 在本行行末附加文本 i 在光标前插入文本 I 在本行开始插入文本 o 在光标下插入新行 O 在光标上插入新行 定位命令 命令 作用 h 方向左键. 左移一个字符 j 方向下键. 下移一行 k 方向上键. 上移一行 l 方向右键. 右移一个字符 $ 移至行尾 0 移至行

Android富文本编辑器RichEditor的使用

以前有个项目做一个笔记本类似的东西,觉得写的不太好,最近重新写,就发现了这个富文本编辑器他的效果是这样的 感觉有点厉害啊 废话不多说开始撸码 1先添加依赖 dependencies { compile 'jp.wasabeef:richeditor-android:1.2.0' } 2写布局 <jp.wasabeef.richeditor.RichEditor android:id="@+id/editor" android:layout_width="match_pa

商城项目整理(四)JDBC+富文本编辑器实现商品增加,样式设置,和修改

UEditor富文本编辑器:http://ueditor.baidu.com/website/ 相应页面展示: 商品添加: 商品修改: 前台商品展示: 商品表建表语句: 1 create table TEST.GOODS_TABLE 2 ( 3 gid NUMBER not null, 4 gname VARCHAR2(90), 5 gdetails CLOB, 6 gpicture VARCHAR2(100), 7 gprice NUMBER, 8 gleixing NUMBER, 9 gpi

微信公众平台二 文本编辑器与表单工具

一.排版 微信公众号,尤其是订阅号是一个自媒体平台,所以发布的内容经过精心的排版是很重要的.然而微信自带的文本编辑器,能够提供的效果有限(虽然能够支持很多种效果,但没有可视化的模板).我选择了一款第三方微信文本编辑器——秀米.网址为xiumi.us.注册登录后,图文排版—>添加新的图文,进入到如下界面: 其中,系统模板功能十分好用,只需要把合适的组件拖入右侧的编辑区,放在合适的位置上,然后在模板内进行编辑,因为组件多样化,所以排版更加灵活易定制.多试试吧!相信你很快就能熟练,下面展示我编辑的一篇

php如何引入百度Ueditor富文本编辑器

文本编辑器插件内容丰富,比起传统的textarea标签输入要好用很多,看看如何在页面实现引入吧 1.下载适合的资源包(可以去官网下载适合的版本),我是php引入 2.下载后解压放到一个位置.(我用的是TP框架,所以我放在了我的指定公共文件夹Pbulic下) 3.在页面中引入 首先在head标签里写引入资源包的路径,路径要写自己存放资源包的路径 <script type="text/javascript" src="__PUBLIC__/ueditor/ueditor.c