最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python用tkinter實(shí)現(xiàn)自定義記事本的方法詳解

 更新時(shí)間:2023年05月09日 11:07:34   作者:二哥不像程序員  
這篇文章主要為大家詳細(xì)介紹了Python用tkinter實(shí)現(xiàn)自定義記事本的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

一、思考

想要完成記事本,我們首先需要考慮一個(gè)正常的記事本都需要具有哪些功能,我們將這些功能按鍵添加到我們的UI界面上即可。一般功能如下:

  • 新建文本文檔
  • 打開本地文件
  • 保存文本文檔
  • 功能項(xiàng):剪切、復(fù)制、粘貼等

設(shè)定好了基本的功能選項(xiàng)之后我們再來思考實(shí)現(xiàn)記事本的思路。

  • 創(chuàng)建記事本窗口
  • 設(shè)定記事本菜單項(xiàng)
  • 給不同的菜單項(xiàng)配置不同的功能選項(xiàng)
  • 運(yùn)行筆記本

二、代碼實(shí)現(xiàn)

創(chuàng)建記事本窗口

創(chuàng)建窗口的時(shí)候,我們要設(shè)定好窗口的高度、寬度、文本區(qū)域以及各種菜單,與設(shè)定的內(nèi)容如下:

class Notepad:
    root = Tk()
    '''
    Width:寬度
    Heith:高度
    TextArea:文本區(qū)域
    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

設(shè)定記事本菜單項(xiàng)

設(shè)定好了基本的框架之后,接下來就是向整個(gè)框架中填入各種參數(shù)與配置項(xiàng),包括菜單欄中各種功能選項(xiàng)、窗口標(biāo)題、窗口位置等。

后續(xù)如果向添加新的功能在init函數(shù)中進(jìn)行添加即可

菜單項(xiàng)代碼示例:

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)

配置功能選項(xiàng)

接下來就是構(gòu)建不同的功能函數(shù),實(shí)現(xiàn)每一個(gè)小功能,這里不需要我們編寫?yīng)毩⒌墓δ芎瘮?shù)代碼,只需要使用tkinter中的函數(shù)進(jìn)行再封裝即可。

配置功能示例代碼:

def __newFile(self):
    '''
    新文件:默認(rèn)是一個(gè)未命名文件
    '''
    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:文本區(qū)域
    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):
        # 設(shè)置文本框的大小
        try:
            self.Width = kwargs['width']
        except KeyError:
            pass
        try:
            self.Height = kwargs['height']
        except KeyError:
            pass
        # 設(shè)置窗口標(biāo)題
        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))
        # 文本區(qū)域大小調(diào)整
        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)
        # 菜單中設(shè)置文件按鈕
        self.MenuBar.add_cascade(label="文件", menu=self.FileMenu)
        # 增加剪切功能
        self.EditMenu.add_command(label="剪切", command=self.__cut)
        # 增加復(fù)制功能
        self.EditMenu.add_command(label="復(fù)制", command=self.__copy)
        # 增加粘貼功能
        self.EditMenu.add_command(label="粘貼", command=self.__paste)
        # 菜單中設(shè)置編輯按鈕
        self.MenuBar.add_cascade(label="編輯", menu=self.EditMenu)
        # 增加關(guān)于記事本選項(xiàng)
        self.HelpMenu.add_command(label="關(guān)于記事本", command=self.__showAbout)
        # 菜單中射者幫助按鈕
        self.MenuBar.add_cascade(label="幫助", menu=self.HelpMenu)
        self.root.config(menu=self.MenuBar)
        self.ScrollBar.pack(side=RIGHT, fill=Y)
        # 滾動條根據(jù)內(nèi)容進(jìn)行調(diào)整
        self.ScrollBar.config(command=self.TextArea.yview)
        self.TextArea.config(yscrollcommand=self.ScrollBar.set)
    def __quitApplication(self):
        '''
        用于退出程序(關(guān)了就消失)
        '''
        self.root.destroy()
    def __showAbout(self):
        '''
        添加幫助菜單中的信息
        '''
        showinfo("關(guān)于記事本", "來自:二哥不像程序員")
    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):
        '''
        新文件:默認(rèn)是一個(gè)未命名文件
        '''
        self.root.title("未命名文件")
        self.file = None
        self.TextArea.delete(1.0, END)
    def __saveFile(self):
        '''
        用于保存文件,不存在的文件進(jìn)行新建,存在的文件在原文件基礎(chǔ)上覆蓋保存
        '''
        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()
    # 添加功能項(xiàng)
    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()

三、展示

在這里插入圖片描述

菜單欄根據(jù)不同的系統(tǒng)會有不同的位置展示,mac嵌入在左上角,win在窗口內(nèi)部進(jìn)行嵌入。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

最新評論

平乐县| 岑巩县| 英吉沙县| 阿城市| 安宁市| 上蔡县| 黄梅县| 丰都县| 合山市| 五家渠市| 甘洛县| 辽阳县| 仁怀市| 宜阳县| 稷山县| 龙南县| 襄樊市| 楚雄市| 麻江县| 沙湾县| 尚志市| 杭锦旗| 舒兰市| 辽阳市| 家居| 阜新市| 灵台县| 镇安县| 道真| 且末县| 兖州市| 宜昌市| 济宁市| 隆尧县| 凤冈县| 石门县| 沁阳市| 乌审旗| 宜宾市| 五大连池市| 营山县|