python实现记事本

代码

import webbrowser
from io import TextIOWrapper
from tkinter import  *
from tkinter.filedialog import  *
from tkinter.colorchooser import  *
from tkinter.simpledialog import *
from tkinter.messagebox import *
from datetime import datetime


class frame(Frame):
    def __init__(self,master=None):
        super().__init__(master)
        self.master=master
        self.filename=None
        self.textpad=None
        self.pack()
        self.mai()
    def mai(self):
        #创建菜单
        menubar=Menu(root)
        #创建子菜单
        menuFile=Menu(menubar)
        menuEdit=Menu(menubar)
        menuColor = Menu(menubar)
        menuFont = Menu(menubar)
        menuHelp=Menu(menubar)
        #将子菜单添加到主菜单
        menubar.add_cascade(label="文件(F)",menu=menuFile)
        menubar.add_cascade(label="编辑(E)",menu=menuEdit)
        menubar.add_cascade(label="颜色(C)",menu=menuColor)
        menubar.add_cascade(label="字体(O)",menu=menuFont)
        menubar.add_cascade(label="帮助(H)",menu=menuHelp)
        #文件
        menuFile.add_command(label="新建",accelerator="ctrl+n",command=self.File1)
        menuFile.add_command(label="打开",accelerator="ctrl+o",command=self.File2)
        menuFile.add_command(label="保存",accelerator="ctrl+s",command=self.File3)
        menuFile.add_command(label="另存",accelerator="ctrl+e",command=self.File4)
        menuFile.add_separator()
        menuFile.add_command(label="退出",accelerator="ctrl+q",command=self.File5)
        #编辑
        menuEdit.add_command(label="搜索",accelerator="ctrl+f",command=self.Edit1)
        menuEdit.add_command(label="替换",accelerator="ctrl+h",command=self.Edit2)
        menuEdit.add_command(label="插入图片", accelerator="ctrl+b", command=self.Edit3)
        menuEdit.add_separator()
        menuEdit.add_command(label="当前时间",accelerator="F5",command=self.Edit4)
        #颜色
        menuColor.add_command(label="背景颜色",accelerator="ctrl+1",command=self.Color1)
        menuColor.add_command(label="字体颜色",accelerator="ctrl+2",command=self.Color2)
        menuColor.add_command(label="字体外描边",accelerator="ctrl+3",command=self.Color3)
        menuColor.add_separator()
        menuColor.add_command(label="字体内描边",accelerator="ctrl+4",command=self.Color4)
        #字体
        menuFont.add_command(label="字体大小",accelerator="ctrl+5",command=self.Font1)
        menuFont.add_separator()
        menuFont.add_command(label="字体类型",accelerator="ctrl+6",command=self.Font2)
        #帮助
        menuHelp.add_command(label="帮助网页",accelerator="ctrl+7",command=self.Help1)
        menuHelp.add_command(label="关于",accelerator="ctrl+8",command=self.Help2)
        root.bind("<Control-n>",lambda event:self.File1())
        root.bind("<Control-o>",lambda event:self.File2())
        root.bind("<Control-s>",lambda event:self.File3())
        root.bind("<Control-e>",lambda event:self.File4())
        root.bind("<Control-q>",lambda event:self.File5())

        root.bind("<Control-f>",lambda event:self.Edit1())
        root.bind("<Control-h>",lambda event:self.Edit2())
        root.bind("<Control-b>",lambda event:self.Edit3())
        root.bind("<KeyPress-F5>",lambda event:self.Edit4())

        root.bind("<Control-1>", lambda event: self.Color1())
        root.bind("<Control-2>", lambda event: self.Color2())
        root.bind("<Control-3>", lambda event: self.Color3())
        root.bind("<Control-4>", lambda event: self.Color4())

        root.bind("<Control-5>", lambda event: self.Font1())
        root.bind("<Control-6>", lambda event: self.Font2())

        root.bind("<Control-7>", lambda event: self.Help1())
        root.bind("<Control-8>", lambda event: self.Help2())





        root["menu"]=menubar
        self.textpad=Text(root,width=660,height=630)
        self.textpad.pack()


    #文件方法
    def File1(self):
        self.filename=asksaveasfile(title="选择新建路径",defaultextension=".txt",initialfile="未命名.txt")
    def File2(self):
        self.textpad.delete(1.0,END)
        self.filename=askopenfilename()
        with open(f"{self.filename}")as f:
            self.textpad.insert(INSERT,f.read())
    #漏洞
    def File3(self):
        if (type(self.filename)==TextIOWrapper):
            with open(self.filename.name, "w+")as f:
                f.write(self.textpad.get(1.0, END))
        elif(type(self.filename)==str):
            with open(self.filename, "w+")as f:
                f.write(self.textpad.get(1.0, END))
        else:
            self.filename = asksaveasfile(title="选择保存路径", defaultextension=".txt", initialfile="未命名.txt")
            print(self.filename)
            with open(self.filename.name, "w+")as f:
                f.write(self.textpad.get(1.0, END))
    def File4(self):
        self.filename03 = asksaveasfile(title="选择另存路径", defaultextension=".txt", initialfile="未命名.txt")
        with open(f"{self.filename03.name}","w+")as f:
            f.write(self.textpad.get(1.0,END))
    def File5(self):
        self.quit()
    #编辑方法
    def Edit1(self):
        fan=askstring(title="请输入需要查找内容",prompt="请输入")
        if(fan in self.textpad.get(1.0,END)):
            messagebox.showinfo("查找结果", "查找内容存在")
        else:
            messagebox.showinfo("查找结果", "不好意思,查找内容不存在")
    def Edit2(self):
        self.ask = askstring(title="请输入替换前", prompt="请输入")
        if self.ask in self.textpad.get(1.0, END):
            self.ask01 = askstring(title="请输入替换后", prompt="请输入")
            aa=self.textpad.get(1.0, END).replace(f"{self.ask}",f"{self.ask01}")
            self.textpad.delete(1.0, END)
            self.textpad.insert(INSERT, aa)
        else:
            messagebox.showinfo("提示","不存在")

    def Edit3(self):
        my_photo = PhotoImage(file="almond_PNG17.png")
        self.textpad.image_create(END, image=my_photo)
    def Edit4(self):
        dt = datetime.now()
        self.textpad.insert(INSERT, dt.strftime( '%Y-%m-%d %I:%M:%S %p' ))
    #颜色方法
    def Color1(self):
        self.color=askcolor(title="请选择背景色")
        self.textpad["background"]=self.color[1]
    def Color2(self):
        self.color=askcolor(title="请选择字体颜色")
        self.textpad["foreground"]=self.color[1]
    def Color3(self):
        pass
    def Color4(self):
        pass
    #字体方法

    def Font1(self):
        root1=Tk()
        root1.geometry("250x100")
        self.size=Scale(root1, to=10, length=200, tickinterval=0.1, orient=HORIZONTAL, command=self.size1)
        self.size.pack()
        print(self.size)
        root1.mainloop()

    def size1(self,v):
        self.textpad["font"]=v
        print(v)

    def Font2(self):
        self.size1("楷体")
    #帮助方法
    def Help1(self):
        webbrowser.open("http://localhost:8080/web_test/bootstrap/bb.jsp")
    def Help2(self):
        messagebox.showinfo("关于", "由ZGT开发,一切解释权归本人所有!")


root=Tk()
root.geometry("400x400+100+100")
root.title("ZGT的记事本")
app=frame(master=root)
root.mainloop()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45626867/article/details/107644186