<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
想要完成記事本,我們首先需要考慮一個正常的記事本都需要具有哪些功能,我們將這些功能按鍵新增到我們的UI介面上即可。一般功能如下:
設定好了基本的功能選項之後我們再來思考實現記事本的思路。
建立記事本視窗
建立視窗的時候,我們要設定好視窗的高度、寬度、文字區域以及各種選單,與設定的內容如下:
class Notepad: root = Tk() ''' Width:寬度 Heith:高度 TextArea:文字區域 MenuBar:選單欄 FileMenu:檔案選單 EditMenu:編輯選單 HelpMenu:幫助選單 ScrollBat:卷軸 ''' Width = 300 Height = 300 TextArea = Text(root) MenuBar = Menu(root) FileMenu = Menu(MenuBar, tearoff=0) EditMenu = Menu(MenuBar, tearoff=0) HelpMenu = Menu(MenuBar, tearoff=0) ScrollBar = Scrollbar(TextArea) file = None
設定記事本選單項
設定好了基本的框架之後,接下來就是向整個框架中填入各種引數與設定項,包括選單欄中各種功能選項、視窗標題、視窗位置等。
後續如果向新增新的功能在init函數中進行新增即可
選單項程式碼範例:
def __init__(self, **kwargs): # 增加新建設定 self.FileMenu.add_command(label="新建", command=self.__newFile) # 增加開啟設定 self.FileMenu.add_command(label="開啟", command=self.__openFile) # 增加儲存設定 self.FileMenu.add_command(label="儲存", command=self.__saveFile)
設定功能選項
接下來就是構建不同的功能函數,實現每一個小功能,這裡不需要我們編寫獨立的功能函數程式碼,只需要使用tkinter中的函數進行再封裝即可。
設定功能範例程式碼:
def __newFile(self): ''' 新檔案:預設是一個未命名檔案 ''' self.root.title("未命名檔案") self.file = None self.TextArea.delete(1.0, END)
完整程式碼如下
import tkinter import os from tkinter import * from tkinter.messagebox import * from tkinter.filedialog import * class Notepad: root = Tk() ''' Width:寬度 Heith:高度 TextArea:文字區域 MenuBar:選單欄 FileMenu:檔案選單 EditMenu:編輯選單 HelpMenu:幫助選單 ScrollBat:卷軸 ''' Width = 300 Height = 300 TextArea = Text(root) MenuBar = Menu(root) FileMenu = Menu(MenuBar, tearoff=0) EditMenu = Menu(MenuBar, tearoff=0) HelpMenu = Menu(MenuBar, tearoff=0) ScrollBar = Scrollbar(TextArea) file = None def __init__(self, **kwargs): # 設定文字方塊的大小 try: self.Width = kwargs['width'] except KeyError: pass try: self.Height = kwargs['height'] except KeyError: pass # 設定視窗標題 self.root.title("Python記事本") # 將視窗居中顯示 screenWidth = self.root.winfo_screenwidth() screenHeight = self.root.winfo_screenheight() left = (screenWidth / 2) - (self.Width / 2) top = (screenHeight / 2) - (self.Height / 2) self.root.geometry('%dx%d+%d+%d' % (self.Width, self.Height, left, top)) # 文字區域大小調整 self.root.grid_rowconfigure(0, weight=1) self.root.grid_columnconfigure(0, weight=1) # Add controls (widget) self.TextArea.grid(sticky=N + E + S + W) # 增加新建設定 self.FileMenu.add_command(label="新建", command=self.__newFile) # 增加開啟設定 self.FileMenu.add_command(label="開啟", command=self.__openFile) # 增加儲存設定 self.FileMenu.add_command(label="儲存", command=self.__saveFile) # 增加退出設定 self.FileMenu.add_separator() self.FileMenu.add_command(label="退出", command=self.__quitApplication) # 選單中設定檔案按鈕 self.MenuBar.add_cascade(label="檔案", menu=self.FileMenu) # 增加剪下功能 self.EditMenu.add_command(label="剪下", command=self.__cut) # 增加複製功能 self.EditMenu.add_command(label="複製", command=self.__copy) # 增加貼上功能 self.EditMenu.add_command(label="貼上", command=self.__paste) # 選單中設定編輯按鈕 self.MenuBar.add_cascade(label="編輯", menu=self.EditMenu) # 增加關於記事本選項 self.HelpMenu.add_command(label="關於記事本", command=self.__showAbout) # 選單中射者幫助按鈕 self.MenuBar.add_cascade(label="幫助", menu=self.HelpMenu) self.root.config(menu=self.MenuBar) self.ScrollBar.pack(side=RIGHT, fill=Y) # 卷軸根據內容進行調整 self.ScrollBar.config(command=self.TextArea.yview) self.TextArea.config(yscrollcommand=self.ScrollBar.set) def __quitApplication(self): ''' 用於退出程式(關了就消失) ''' self.root.destroy() def __showAbout(self): ''' 新增幫助選單中的資訊 ''' showinfo("關於記事本", "來自:二哥不像程式設計師") def __openFile(self): ''' 開啟檔案 ''' self.file = askopenfilename(defaultextension=".txt", filetypes=[("All Files", "*.*"), ("Text Documents", "*.txt")]) if self.file == "": self.file = None else: self.root.title(os.path.basename(self.file)) self.TextArea.delete(1.0, END) file = open(self.file, "r") self.TextArea.insert(1.0, file.read()) file.close() def __newFile(self): ''' 新檔案:預設是一個未命名檔案 ''' self.root.title("未命名檔案") self.file = None self.TextArea.delete(1.0, END) def __saveFile(self): ''' 用於儲存檔案,不存在的檔案進行新建,存在的檔案在原檔案基礎上覆蓋儲存 ''' if self.file == None: self.file = asksaveasfilename(initialfile='Untitled.txt', defaultextension=".txt", filetypes=[("All Files", "*.*"), ("Text Documents", "*.txt")]) if self.file == "": self.file = None else: file = open(self.file, "w") file.write(self.TextArea.get(1.0, END)) file.close() # 更改title名字為檔名 self.root.title(os.path.basename(self.file)) else: file = open(self.file, "w") file.write(self.TextArea.get(1.0, END)) file.close() # 新增功能項 def __cut(self): self.TextArea.event_generate("<<Cut>>") def __copy(self): self.TextArea.event_generate("<<Copy>>") def __paste(self): self.TextArea.event_generate("<<Paste>>") def run(self): # 使用mainloop()使得視窗一直存在 self.root.mainloop() notepad = Notepad(width=600, height=400) notepad.run()
選單欄根據不同的系統會有不同的位置展示,mac嵌入在左上角,win在視窗內部進行嵌入。
本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45