前言
本文的操作环境: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 Tkinterimport *
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 tkMessageBoximport *
#关于
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('<>')
def copy():
textpad.event_generate('<>')
def paste():
textpad.event_generate('<>')
def redo():
textpad.event_generate('<>')
def undo():
textpad.event_generate('<>')
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。运行代码,功能实现!快捷键亲测可用~
总结
以上就是这篇文中的全部内容了,这算是对此次开发的简单记事本的一个总结,之后有时间也是会添加更多的功能。希望本文的内容对大家的学习或者工作能带来一定的帮助,如果疑问大家可以留言交流。