利用Python開發實現簡單的記事本_python

來源:互聯網
上載者:User

前言

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

樣本圖

如上圖,我們可以看到這個記事本主要分為三個模組:檔案,編輯和關於,結合我自身的習慣外加四個toolbar:建立、開啟、撤銷和儲存。

下來就我個人構建這個記事本做個總結。

一、整體架構構建

1.三個主模組的建立

首先,我們先建立上圖中的三個主模組,同時,在模組中建立各個模組的功能。先以檔案為例:下設功能:建立、開啟、儲存和另存新檔,代碼如下:

#-*-encoding:utf8from Tkinter import *root = Tk()root.title('Benben Node')#create menumenubar = 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並設定合適的間距,對應的代碼如下:

#toolbartoolbar = 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")

編輯狀態列的代碼:

#statusbarstatus = 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。運行代碼,功能實現!快速鍵親測可用~

總結

以上就是這篇文中的全部內容了,這算是對此次開發的簡單記事本的一個總結,之後有時間也是會添加更多的功能。希望本文的內容對大家的學習或者工作能帶來一定的協助,如果疑問大家可以留言交流。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.