利用Python開發(fā)實現(xiàn)簡單的記事本
前言
本文的操作環(huán)境: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.創(chuàng)建狀態(tài)欄(statusbar)和正文編輯區(qū)域
首先在程序中添加:
root = Tk()
root.title('Benben Node')
root.geometry("800x500+100+100")
編輯狀態(tài)欄的代碼:
#statusbar status = Label(root,text = 'Ln20',bd = 1,relief = SUNKEN,anchor = 'w') status.pack(side = BOTTOM,fill = X)
當然我們還可以建立相應的編輯區(qū)域和滾動條,對應的代碼如下:
#正文編輯區(qū)域 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)
執(zhí)行代碼,結果:

輸入相應的可以看到右邊界對應的滾動條隨輸入滾動。
二、關于模塊的實現(xiàn)
在這三個模塊中,關于是最好實現(xiàn)的一個,那就從最簡單的開始實現(xiàn)吧。
對應的代碼如下:
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)
運行結果:

三、文件模塊的實現(xiàn)
這部分的實現(xiàn)參見Tkinter官網(wǎng)中的fileDialogs,相應的使用各個方法實現(xiàn)功能:新建、打開、保存和另存為,建立相應的函數(shù)實現(xiàn),代碼如下:
#新建
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,運行結果:

四、編輯模塊的實現(xiàn)
編輯要實現(xiàn)的功能:撤銷,重做,復制,剪切,粘貼,查找和全選,對應的函數(shù)代碼如下:
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。運行代碼,功能實現(xiàn)!快捷鍵親測可用~
總結
以上就是這篇文中的全部內容了,這算是對此次開發(fā)的簡單記事本的一個總結,之后有時間也是會添加更多的功能。希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果疑問大家可以留言交流。
相關文章
基于Numpy.convolve使用Python實現(xiàn)滑動平均濾波的思路詳解
這篇文章主要介紹了Python極簡實現(xiàn)滑動平均濾波(基于Numpy.convolve)的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05
Pandas排序和分組排名(sort和rank)的實現(xiàn)
Pandas是Python中廣泛使用的數(shù)據(jù)處理庫,提供了豐富的功能來處理和分析數(shù)據(jù),本文主要介紹了Pandas排序和分組排名(sort和rank)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-07-07
selenium3+python3環(huán)境搭建教程圖解
這篇文章主要介紹了selenium3+python3環(huán)境搭建教程圖解,需要的朋友可以參考下2018-12-12
利用Python連接Oracle數(shù)據(jù)庫的基本操作指南
由于之前的在職的公司沒有機會接觸到Oralce數(shù)據(jù)庫,所以就沒有用python連接過Oralce,之前大多集中在連接mysql和sql server,最近在做一下web自動化的工作,所以簡單的記錄一下,下面這篇文章主要給大家介紹了關于利用Python連接Oracle數(shù)據(jù)庫的基本操作,需要的朋友可以參考下2022-06-06

