前言
本文的操作环境:ubuntu,Python2.7,采用的是Pycharm进行代码编辑,个人很喜欢它的代码自动补齐功能。
示例图
如上图,我们可以看到这个记事本主要分为三个模块:文件,编辑和关于,结合我自身的习惯外加四个toolbar:新建、打开、撤销和保存。
下来就我个人构建这个记事本做个总结。
一、整体框架构建
1.三个主模块的建立
首先,我们先建立上图中的三个主模块,同时,在模块中建立各个模块的功能。先以文件为例:下设功能:新建、打开、保存和另存为,代码如下:
#-*-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()
运行结果:
我们可以看到一个简单的文件栏就建好了。对应的建立编辑和关于模块。编辑指的是对文本编辑中要使用的模块,下设功能:撤销,重做,复制,剪切,粘贴,查找和全选;关于是下设作者和版权两栏。相应模块对应的代码如下:
#编辑 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并设定合适的间距,对应的代码如下:
#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)和正文编辑区域
首先在程序中添加:
root = Tk() root.title('Benben Node') root.geometry("800x500+100+100")
编辑状态栏的代码:
#statusbar status = Label(root,text = 'Ln20',bd = 1,relief = SUNKEN,anchor = 'w') status.pack(side = BOTTOM,fill = X)
当然我们还可以建立相应的编辑区域和滚动条,对应的代码如下:
#正文编辑区域 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)
执行代码,结果:
输入相应的可以看到右边界对应的滚动条随输入滚动。
二、关于模块的实现
在这三个模块中,关于是最好实现的一个,那就从最简单的开始实现吧。
对应的代码如下:
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,相应的使用各个方法实现功能:新建、打开、保存和另存为,建立相应的函数实现,代码如下:
#新建 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,运行结果:
四、编辑模块的实现
编辑要实现的功能:撤销,重做,复制,剪切,粘贴,查找和全选,对应的函数代码如下:
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。运行代码,功能实现!快捷键亲测可用~
总结
以上就是这篇文中的全部内容了,这算是对此次开发的简单记事本的一个总结,之后有时间也是会添加更多的功能。希望本文的内容对大家的学习或者工作能带来一定的帮助,如果疑问大家可以留言交流。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 好薇2024《兵哥哥》1:124K黄金母盘[WAV+CUE]
- 胡歌.2006-珍惜(EP)【步升大风】【FLAC分轨】
- 洪荣宏.2014-拼乎自己看【华特】【WAV+CUE】
- 伊能静.1999-从脆弱到勇敢1987-1996精选2CD【华纳】【WAV+CUE】
- 刘亮鹭《汽车DJ玩主》[WAV+CUE][1.1G]
- 张杰《最接近天堂的地方》天娱传媒[WAV+CUE][1.1G]
- 群星《2022年度发烧天碟》无损黑胶碟 2CD[WAV+CUE][1.4G]
- 罗文1983-罗文甄妮-射雕英雄传(纯银AMCD)[WAV+CUE]
- 群星《亚洲故事香港纯弦》雨果UPMAGCD2024[低速原抓WAV+CUE]
- 群星《经典咏流传》限量1:1母盘直刻[低速原抓WAV+CUE]
- 庾澄庆1993《老实情歌》福茂唱片[WAV+CUE][1G]
- 许巍《在别处》美卡首版[WAV+CUE][1G]
- 林子祥《单手拍掌》华纳香港版[WAV+CUE][1G]
- 郑秀文.1997-我们的主题曲【华纳】【WAV+CUE】
- 群星.2001-生命因爱动听电影原创音乐AVCD【MEDIA】【WAV+CUE】