Python開發簡單記事本


摘要:

本文是使用Python,結合Tkinter開發簡單記事本。

  本文的操作環境:ubuntu,Python2.7,采用的是Pycharm進行代碼編輯,個人很喜歡它的代碼自動補齊功能。

  最近很想對python加深學習一下,同時也是想試着做一些東西,今天使用python,結合Tkinter來做一個簡單的跨平台記事本。最終實現的記事本如下,也算是麻雀雖小,五臟俱全了,之后也是會繼續完善的:

 

  如上圖,我們可以看到這個記事本主要分為三個模塊:文件,編輯和關於,結合我自身的習慣外加四個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。運行代碼,功能實現!快捷鍵親測可用~

 

  這算是對此次開發的簡單記事本的一個總結,之后有時間也是會添加更多的功能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM