前言
本文的操作环境:ubuntu,Python2.7,采用的是Pycharm进行代码编辑,个人很喜欢它的代码自动补齐功能。
示例图
如上图,我们可以看到这个记事本主要分为三个模块:文件,编辑和关于,结合我自身的习惯外加四个toolbar:新建、打开、撤销和保存。
下来就我个人构建这个记事本做个总结。
一、整体框架构建
1.三个主模块的建立
首先,我们先建立上图中的三个主模块,同时,在模块中建立各个模块的功能。先以文件为例:下设功能:新建、打开、保存和另存为,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#-*-encoding:utf8 from Tkinter import * root = Tk() root.title( 'Benben Node' ) #create menu menubar = Menu(root) root.config(menu = menubar) filemenu = Menu(menubar) filemenu.add_command(label = '新建' ,accelerator = 'ctrl + N' ) filemenu.add_command(label = '打开' ,accelerator = 'ctrl + O' ) filemenu.add_command(label = '保存' ,accelerator = 'ctrl + S' ) filemenu.add_command(label = '另存为' ,accelerator = 'ctrl + Shift + s' ) menubar.add_cascade(label = '文件' ,menu = filemenu) root.mainloop() |
运行结果:
我们可以看到一个简单的文件栏就建好了。对应的建立编辑和关于模块。编辑指的是对文本编辑中要使用的模块,下设功能:撤销,重做,复制,剪切,粘贴,查找和全选;关于是下设作者和版权两栏。相应模块对应的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#编辑 editmenu = Menu(menubar) editmenu.add_command(label = '撤销' ,accelerator = 'ctrl + z' ) editmenu.add_command(label = '重做' ,accelerator = 'ctrl + y' ) editmenu.add_command(label = '复制' ,accelerator = 'ctrl + c' ) editmenu.add_command(label = '剪切' ,accelerator = 'ctrl + x' ) editmenu.add_command(label = '粘贴' ,accelerator = 'ctrl + v' ) editmenu.add_command(label = '查找' ,accelerator = 'ctrl + F' ) editmenu.add_command(label = '全选' ,accelerator = 'ctrl + A' ) menubar.add_cascade(label = '编辑' ,menu = editmenu) #关于 aboutmenu = Menu(menubar) aboutmenu.add_command(label = '作者' ) aboutmenu.add_command(label = '版权' ) menubar.add_cascade(label = '关于' ,menu = aboutmenu) |
运行结果:
截图未能得到各个模块对应的功能。
2.toolbar
在记事本中添加toolbar,添加对应的button并设定合适的间距,对应的代码如下:
1
2
3
4
5
6
7
8
9
10
11
|
#toolbar toolbar = Frame(root,height = 15 ,bg = 'SkyBlue' ) shortButton = Button(toolbar,text = '新建' ,command = open ) shortButton.pack(side = LEFT) shortButton = Button(toolbar,text = '打开' ,command = openfile) shortButton.pack(side = LEFT,padx = 5 ,pady = 5 ) shortButton = Button(toolbar,text = '保存' ,command = save) shortButton.pack(side = RIGHT) shortButton = Button(toolbar,text = '撤销' ,command = undo) shortButton.pack(side = RIGHT,padx = 5 ,pady = 5 ) toolbar.pack(expand = NO,fill = X) |
3.创建状态栏(statusbar)和正文编辑区域
首先在程序中添加:
1
2
3
|
root = Tk() root.title( 'Benben Node' ) root.geometry( "800x500+100+100" ) |
编辑状态栏的代码:
1
2
3
|
#statusbar status = Label(root,text = 'Ln20' ,bd = 1 ,relief = SUNKEN,anchor = 'w' ) status.pack(side = BOTTOM,fill = X) |
当然我们还可以建立相应的编辑区域和滚动条,对应的代码如下:
1
2
3
4
5
6
7
8
9
10
11
|
#正文编辑区域 lnlabel = Label(root,width = 2 ,bg = 'antique white' ) lnlabel.pack(side = LEFT,fill = Y) textpad = Text(root,undo = True ) textpad.pack(expand = YES,fill = BOTH) scroll = Scrollbar(textpad) textpad.config(yscrollcommand = scroll. set ) scroll.config(command = textpad.yview) scroll.pack(side = RIGHT,fill = Y) |
执行代码,结果:
输入相应的可以看到右边界对应的滚动条随输入滚动。
二、关于模块的实现
在这三个模块中,关于是最好实现的一个,那就从最简单的开始实现吧。
对应的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
from tkMessageBox import * #关于 def author(): showinfo( '作者信息' , '本软件由可爱的奔奔完成' ) def about(): showinfo( '版权信息.copyright' , '版权属于奔奔' ) aboutmenu = Menu(menubar) aboutmenu.add_command(label = '作者' ,command = author) aboutmenu.add_command(label = '版权' ,command = about) menubar.add_cascade(label = '关于' ,menu = aboutmenu) |
运行结果:
三、文件模块的实现
这部分的实现参见Tkinter官网中的fileDialogs,相应的使用各个方法实现功能:新建、打开、保存和另存为,建立相应的函数实现,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#新建 def new(): root.title( '未命名文件' ) filename = None textpad.delete( 1.0 ,END) #打开 def openfile(): global filename filename = askopenfilename(defaultextension = '.txt' ) if filename = = '': filename = None else : root.title( 'FileName:' + os.path.basename(filename)) textpad.delete( 1.0 ,END) f = open (filename, 'r' ) textpad.insert( 1.0 ,f.read()) f.close() #保存 def save(): global filename try : f = open (filename, 'w' ) msg = textpad.get( 1.0 ,END) f.write(msg) f.close() except : saveas() #另存为 def saveas(): f = asksaveasfilename(initialfile = '未命名.txt' , defaultextension = '.txt' ) global filename filename = f fh = open (f, 'w' ) msg = textpad.get( 1.0 ,END) fh.write(msg) fh.close() root.title( 'FileName:' + os.path.basename(f)) |
相应的在filemenu和toolbar中加入对应的command,运行结果:
四、编辑模块的实现
编辑要实现的功能:撤销,重做,复制,剪切,粘贴,查找和全选,对应的函数代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
def cut(): textpad.event_generate( '<<Cut>>' ) def copy(): textpad.event_generate( '<<Copy>>' ) def paste(): textpad.event_generate( '<<Paste>>' ) def redo(): textpad.event_generate( '<<Redo>>' ) def undo(): textpad.event_generate( '<<Undo>>' ) def selectAll(): textpad.tag_add( 'sel' , '1.0' ,END) def search(): topsearch = Toplevel(root) topsearch.geometry( '300x30+200+250' ) label1 = Label(topsearch,text = 'Find' ) label1.grid(row = 0 , column = 0 ,padx = 5 ) entry1 = Entry(topsearch,width = 20 ) entry1.grid(row = 0 , column = 1 ,padx = 5 ) button1 = Button(topsearch,text = '查找' ) button1.grid(row = 0 , column = 2 ) |
同样在editmenu和toolbar中加入对应的command。运行代码,功能实现!快捷键亲测可用~
总结
以上就是这篇文中的全部内容了,这算是对此次开发的简单记事本的一个总结,之后有时间也是会添加更多的功能。希望本文的内容对大家的学习或者工作能带来一定的帮助,如果疑问大家可以留言交流。