python实现可以加粗、下划线,可以保存,可以更改编码,可以修改字体的记事本源码
时间: 2024-03-03 17:49:00 浏览: 170
以下是一个简单的Python实现记事本的源码,支持加粗、下划线、保存、更改编码和修改字体等功能:
```python
import tkinter as tk
from tkinter import scrolledtext, messagebox, filedialog, font
class Notepad:
def __init__(self, master):
self.master = master
master.title("记事本")
master.geometry("600x400")
self.text = scrolledtext.ScrolledText(master, wrap=tk.WORD, font=("微软雅黑", 12))
self.text.pack(fill=tk.BOTH, expand=True)
# 创建菜单栏
self.menu_bar = tk.Menu(master)
# 创建文件菜单
self.file_menu = tk.Menu(self.menu_bar, tearoff=0)
self.file_menu.add_command(label="新建", command=self.new_file)
self.file_menu.add_command(label="打开", command=self.open_file)
self.file_menu.add_command(label="保存", command=self.save_file)
self.file_menu.add_command(label="另存为", command=self.save_file_as)
self.file_menu.add_separator()
self.file_menu.add_command(label="退出", command=self.quit)
# 创建编辑菜单
self.edit_menu = tk.Menu(self.menu_bar, tearoff=0)
self.edit_menu.add_command(label="剪切", command=self.cut)
self.edit_menu.add_command(label="复制", command=self.copy)
self.edit_menu.add_command(label="粘贴", command=self.paste)
self.edit_menu.add_separator()
self.edit_menu.add_command(label="加粗", command=self.bold)
self.edit_menu.add_command(label="下划线", command=self.underline)
# 创建格式菜单
self.format_menu = tk.Menu(self.menu_bar, tearoff=0)
self.format_menu.add_command(label="字体", command=self.change_font)
self.format_menu.add_command(label="编码", command=self.change_encoding)
# 将菜单添加到菜单栏
self.menu_bar.add_cascade(label="文件", menu=self.file_menu)
self.menu_bar.add_cascade(label="编辑", menu=self.edit_menu)
self.menu_bar.add_cascade(label="格式", menu=self.format_menu)
# 配置菜单栏
master.config(menu=self.menu_bar)
# 新建文件
def new_file(self):
self.text.delete("1.0", tk.END)
# 打开文件
def open_file(self):
file_path = filedialog.askopenfilename()
if file_path:
with open(file_path, "r") as f:
self.text.delete("1.0", tk.END)
self.text.insert(tk.END, f.read())
# 保存文件
def save_file(self):
if not hasattr(self, "file_path") or not self.file_path:
self.save_file_as()
else:
with open(self.file_path, "w") as f:
f.write(self.text.get("1.0", tk.END))
# 另存为
def save_file_as(self):
file_path = filedialog.asksaveasfilename()
if file_path:
self.file_path = file_path
self.save_file()
# 退出
def quit(self):
if messagebox.askokcancel("退出", "确定要退出吗?"):
self.master.destroy()
# 剪切
def cut(self):
self.text.event_generate("<<Cut>>")
# 复制
def copy(self):
self.text.event_generate("<<Copy>>")
# 粘贴
def paste(self):
self.text.event_generate("<<Paste>>")
# 加粗
def bold(self):
current_tags = self.text.tag_names("sel.first")
if "bold" in current_tags:
self.text.tag_remove("bold", "sel.first", "sel.last")
else:
self.text.tag_add("bold", "sel.first", "sel.last")
# 下划线
def underline(self):
current_tags = self.text.tag_names("sel.first")
if "underline" in current_tags:
self.text.tag_remove("underline", "sel.first", "sel.last")
else:
self.text.tag_add("underline", "sel.first", "sel.last")
# 更改字体
def change_font(self):
font_choice = font.Font(self.master, self.text["font"])
font_str = font_choice.actual()["family"]
size_str = font_choice.actual()["size"]
new_font = font.Font(family=font_str, size=size_str)
font_tuple = font.families()
font_name = messagebox.askquestion("选择字体", "请选择一个字体", icon="question", type="okcancel")
new_font.config(family=font_tuple[int(font_name)])
self.text.config(font=new_font)
# 更改编码
def change_encoding(self):
encoding_choice = messagebox.askquestion("选择编码", "请选择一个编码", icon="question", type="okcancel")
if encoding_choice == "ok":
self.text["encoding"] = "utf-8"
else:
self.text["encoding"] = "gbk"
root = tk.Tk()
notepad = Notepad(root)
root.mainloop()
```
这个记事本支持加粗、下划线、保存、更改编码和修改字体等功能。可以通过菜单栏或快捷键来实现这些功能。
阅读全文