利用Python開(kāi)發(fā)實(shí)現(xiàn)簡(jiǎn)單的記事本
前言
本文的操作環(huán)境:ubuntu,Python2.7,采用的是Pycharm進(jìn)行代碼編輯,個(gè)人很喜歡它的代碼自動(dòng)補(bǔ)齊功能。
示例圖

如上圖,我們可以看到這個(gè)記事本主要分為三個(gè)模塊:文件,編輯和關(guān)于,結(jié)合我自身的習(xí)慣外加四個(gè)toolbar:新建、打開(kāi)、撤銷(xiāo)和保存。
下來(lái)就我個(gè)人構(gòu)建這個(gè)記事本做個(gè)總結(jié)。
一、整體框架構(gòu)建
1.三個(gè)主模塊的建立
首先,我們先建立上圖中的三個(gè)主模塊,同時(shí),在模塊中建立各個(gè)模塊的功能。先以文件為例:下設(shè)功能:新建、打開(kāi)、保存和另存為,代碼如下:
#-*-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 = '打開(kāi)',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()
運(yùn)行結(jié)果:

我們可以看到一個(gè)簡(jiǎn)單的文件欄就建好了。對(duì)應(yīng)的建立編輯和關(guān)于模塊。編輯指的是對(duì)文本編輯中要使用的模塊,下設(shè)功能:撤銷(xiāo),重做,復(fù)制,剪切,粘貼,查找和全選;關(guān)于是下設(shè)作者和版權(quán)兩欄。相應(yīng)模塊對(duì)應(yīng)的代碼如下:
#編輯 editmenu = Menu(menubar) editmenu.add_command(label = '撤銷(xiāo)',accelerator = 'ctrl + z') editmenu.add_command(label = '重做',accelerator = 'ctrl + y') editmenu.add_command(label = '復(fù)制',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) #關(guān)于 aboutmenu = Menu(menubar) aboutmenu.add_command(label = '作者') aboutmenu.add_command(label = '版權(quán)') menubar.add_cascade(label = '關(guān)于',menu = aboutmenu)
運(yùn)行結(jié)果:

截圖未能得到各個(gè)模塊對(duì)應(yīng)的功能。
2.toolbar
在記事本中添加toolbar,添加對(duì)應(yīng)的button并設(shè)定合適的間距,對(duì)應(yīng)的代碼如下:
#toolbar toolbar = Frame(root,height = 15,bg = 'SkyBlue') shortButton = Button(toolbar,text = '新建',command = open) shortButton.pack(side = LEFT) shortButton = Button(toolbar,text = '打開(kāi)',command = openfile) shortButton.pack(side = LEFT,padx = 5,pady = 5) shortButton = Button(toolbar,text = '保存',command = save) shortButton.pack(side = RIGHT) shortButton = Button(toolbar,text = '撤銷(xiāo)',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)
當(dāng)然我們還可以建立相應(yīng)的編輯區(qū)域和滾動(dòng)條,對(duì)應(yīng)的代碼如下:
#正文編輯區(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í)行代碼,結(jié)果:

輸入相應(yīng)的可以看到右邊界對(duì)應(yīng)的滾動(dòng)條隨輸入滾動(dòng)。
二、關(guān)于模塊的實(shí)現(xiàn)
在這三個(gè)模塊中,關(guān)于是最好實(shí)現(xiàn)的一個(gè),那就從最簡(jiǎn)單的開(kāi)始實(shí)現(xiàn)吧。
對(duì)應(yīng)的代碼如下:
from tkMessageBox import *
#關(guān)于
def author():
showinfo('作者信息','本軟件由可愛(ài)的奔奔完成')
def about():
showinfo('版權(quán)信息.copyright','版權(quán)屬于奔奔')
aboutmenu = Menu(menubar)
aboutmenu.add_command(label = '作者',command = author)
aboutmenu.add_command(label = '版權(quán)',command = about)
menubar.add_cascade(label = '關(guān)于',menu = aboutmenu)
運(yùn)行結(jié)果:

三、文件模塊的實(shí)現(xiàn)
這部分的實(shí)現(xiàn)參見(jiàn)Tkinter官網(wǎng)中的fileDialogs,相應(yīng)的使用各個(gè)方法實(shí)現(xiàn)功能:新建、打開(kāi)、保存和另存為,建立相應(yīng)的函數(shù)實(shí)現(xiàn),代碼如下:
#新建
def new():
root.title('未命名文件')
filename = None
textpad.delete(1.0,END)
#打開(kāi)
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))
相應(yīng)的在filemenu和toolbar中加入對(duì)應(yīng)的command,運(yùn)行結(jié)果:

四、編輯模塊的實(shí)現(xiàn)
編輯要實(shí)現(xiàn)的功能:撤銷(xiāo),重做,復(fù)制,剪切,粘貼,查找和全選,對(duì)應(yīng)的函數(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中加入對(duì)應(yīng)的command。運(yùn)行代碼,功能實(shí)現(xiàn)!快捷鍵親測(cè)可用~
總結(jié)
以上就是這篇文中的全部?jī)?nèi)容了,這算是對(duì)此次開(kāi)發(fā)的簡(jiǎn)單記事本的一個(gè)總結(jié),之后有時(shí)間也是會(huì)添加更多的功能。希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果疑問(wèn)大家可以留言交流。
相關(guān)文章
基于Numpy.convolve使用Python實(shí)現(xiàn)滑動(dòng)平均濾波的思路詳解
這篇文章主要介紹了Python極簡(jiǎn)實(shí)現(xiàn)滑動(dòng)平均濾波(基于Numpy.convolve)的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
Pandas排序和分組排名(sort和rank)的實(shí)現(xiàn)
Pandas是Python中廣泛使用的數(shù)據(jù)處理庫(kù),提供了豐富的功能來(lái)處理和分析數(shù)據(jù),本文主要介紹了Pandas排序和分組排名(sort和rank)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
selenium3+python3環(huán)境搭建教程圖解
這篇文章主要介紹了selenium3+python3環(huán)境搭建教程圖解,需要的朋友可以參考下2018-12-12
使用Python實(shí)現(xiàn)自動(dòng)編寫(xiě)word文檔
這篇文章主要為大家詳細(xì)介紹了如何使用Python中的python-docx實(shí)現(xiàn)自動(dòng)編寫(xiě)word文檔,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2024-12-12
Python使用國(guó)內(nèi)鏡像加速pip安裝的方法講解
在Python開(kāi)發(fā)中,pip是一個(gè)非常重要的工具,用于安裝和管理Python的第三方庫(kù),然而,在國(guó)內(nèi)使用pip安裝依賴(lài)時(shí),往往會(huì)因?yàn)榫W(wǎng)絡(luò)問(wèn)題而導(dǎo)致速度緩慢甚至超時(shí),為了解決這個(gè)問(wèn)題,本文將詳細(xì)介紹如何使用-i參數(shù)配置國(guó)內(nèi)鏡像源,加速pip的安裝過(guò)程,需要的朋友可以參考下2025-02-02
利用Python連接Oracle數(shù)據(jù)庫(kù)的基本操作指南
由于之前的在職的公司沒(méi)有機(jī)會(huì)接觸到Oralce數(shù)據(jù)庫(kù),所以就沒(méi)有用python連接過(guò)Oralce,之前大多集中在連接mysql和sql server,最近在做一下web自動(dòng)化的工作,所以簡(jiǎn)單的記錄一下,下面這篇文章主要給大家介紹了關(guān)于利用Python連接Oracle數(shù)據(jù)庫(kù)的基本操作,需要的朋友可以參考下2022-06-06

