基于Python的记事本实现

完整的记事本,需要先创建记事本窗口,然后添加菜单栏,最后完成菜单栏里面的功能项,实现记事本的完美输出。

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("关于记事本", "来自:小蜜蜂VS")

   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()

                                   感谢大家的阅读,希望本篇文章对你有所帮助。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蜜蜂vs码农

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值