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