Warning

这个记事本无法选择保存格式,不过玩一玩也是可以的

Warning

用Python的IDLE新建项目写!用Python的IDLE新建项目写!用Python的IDLE新建项目写!

Tip

结尾有一个精简版,可以看一看

代码如下:

import tkinter as tk
from tkinter import filedialog, messagebox, simpledialog, colorchooser
class Notepad:
    def __init__(self, root):
        self.root = root
        self.root.title("记事本")
        
        self.text = tk.Text(self.root, undo=True)
        self.text.pack(expand=True, fill='both')
        
        menu = tk.Menu(self.root)
        
        file_menu = tk.Menu(menu, tearoff=0)
        file_menu.add_command(label="新建", command=self.new_file)
        file_menu.add_command(label="打开", command=self.open_file)
        file_menu.add_command(label="保存", command=self.save_file)
        file_menu.add_command(label="另存", command=self.save_as_file)
        file_menu.add_command(label="退出", command=self.exit)
        menu.add_cascade(label="文件", menu=file_menu)
        
        edit_menu = tk.Menu(menu, tearoff=0)
        edit_menu.add_command(label="复制", command=self.copy)
        edit_menu.add_command(label="粘贴", command=self.paste)
        edit_menu.add_command(label="剪切", command=self.cut)
        edit_menu.add_command(label="替换", command=self.replace)
        menu.add_cascade(label="编辑", menu=edit_menu)
        
        format_menu = tk.Menu(menu, tearoff=0)
        format_menu.add_command(label="设置字号", command=self.set_font_size)
        format_menu.add_command(label="设置背景", command=self.set_bg_color)
        format_menu.add_command(label="设置字色", command=self.set_fg_color)
        menu.add_cascade(label="格式", menu=format_menu)
        
        self.root.config(menu=menu)
        
    def new_file(self):
        self.text.delete('1.0', tk.END)
        
    def open_file(self):
        file = filedialog.askopenfile(mode='r')
        if file is not None:
            self.text.delete('1.0', tk.END)
            self.text.insert(tk.INSERT, file.read())
            file.close()
            
    def save_file(self):
        file = filedialog.asksaveasfile(mode='w')
        if file is not None:
            file.write(self.text.get('1.0', tk.END))
            file.close()
            
    def save_as_file(self):
        file = filedialog.asksaveasfile(mode='w')
        if file is not None:
            file.write(self.text.get('1.0', tk.END))
            file.close()
            
    def exit(self):
        self.root.destroy()
        
    def copy(self):
        self.text.clipboard_clear()
        self.text.clipboard_append(self.text.selection_get())
        
    def paste(self):
        self.text.insert(tk.INSERT, self.text.clipboard_get())
        
    def cut(self):
        self.copy()
        self.text.delete(tk.SEL_FIRST, tk.SEL_LAST)
        
    def replace(self):
        target = simpledialog.askstring("替换", "输入要替换的文本:")
        if target:
            replace_text = simpledialog.askstring("替换", "输入替换后的文本:")
            if replace_text:
                start = self.text.search(target, tk.INSERT, stopindex=tk.END)
                if start:
                    end = f"{start}+{len(target)}c"
                    self.text.delete(start, end)
                    self.text.insert(start, replace_text)
        
    def set_font(self):
        font = simpledialog.askstring("设置字体", "输入字体名称:")
        if font:
            self.text.config(font=(font, self.text['font'].split()[1]))
            
    def set_font_size(self):
        size = simpledialog.askinteger("设置字号", "输入字号:")
        if size:
            self.text.config(font=(self.text['font'].split()[0], size))
            
    def set_bg_color(self):
        color = colorchooser.askcolor(title="设置背景")
        if color[1]:
            self.text.config(bg=color[1])
        
    def set_fg_color(self):
        color = colorchooser.askcolor(title="设置字色")
        if color[1]:
            self.text.config(fg=color[1])
if __name__ == "__main__":
    root = tk.Tk()
    app = Notepad(root)
    root.mainloop()

代码大小4KB

精简版
同样用Python的IDLE新建

代码如下:

import tkinter as tk
from tkinter import filedialog
def save_file():
    file_path = filedialog.asksaveasfilename()
    if file_path:
        with open(file_path, 'w') as file:
            file.write(text_editor.get('1.0', tk.END))
root = tk.Tk()
root.title()
menu_bar = tk.Menu(root)
root.config(menu=menu_bar)
file_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="保存", command=save_file)
text_editor = tk.Text(root)
text_editor.pack(expand=1, fill=tk.BOTH)
root.mainloop()

代码大小510字节!

大小释义
1KB=1024字节,510字节≈0.5KB!

2024.7.22更新
增加彩色代码高亮显示

OVER

转载请注明出处