基于Python的记事本应用

祝贺大家国庆快乐

Python 记事本

在当今数字化的时代,文本编辑工具是我们日常工作、学习和生活中不可或缺的一部分。Python 记事本作为一款功能强大、简洁易用的文本编辑软件,为用户提供了高效、便捷的文本处理体验。

B站视频观看地址:点我跳转

一、功能特点

(一)简洁直观的界面

Python 记事本拥有简洁明了的用户界面,布局合理,操作便捷。无论是新手还是经验丰富的用户,都能在短时间内快速上手。无需复杂的菜单导航,你可以轻松找到所需的编辑功能,专注于文本创作和处理。

(二)基本编辑功能一应俱全

1.文字输入与编辑:支持流畅的文字输入,你可以随心所欲地撰 写文章、记录笔记、编写代码等。同时,提供了丰富的编辑操作,如复制、粘贴、剪切、删除、撤销、重做等,满足你在文本处理过程中的各种需求。

2.段落格式调整:轻松实现段落的对齐方式(左对齐、居中对齐、右对齐、两端对齐)、缩进(首行缩进、悬挂缩进)、行距设置等,让文档结构更加规范、层次分明。

(三)文件操作便捷高效

1.新建文件:快速创建新的空白文本文件,开始你的创作之旅。无论是撰写新的报告、计划,还是记录新的想法和灵感,都能一键启动。

2.打开文件:支持多种文件格式的打开,如.txt、.csv、.log 等常见的文本文件格式。方便你查看和编辑已有的文档,无需在不同的软件之间切换。

3.保存文件:实时保存你的编辑成果,确保数据安全。你可以选择将文件保存到本地指定位置,或者按照自己的需求设置保存格式和编码方式。

4.另存为:如果你需要将当前文件保存为一个新的文件,或者更改文件的保存格式和路径,“另存为” 功能将为你提供便利。

(四)查找与替换功能
1.查找:在大量的文本内容中,快速定位你需要查找的关键词或短语。Python 记事本提供了精确查找和模糊查找两种模式,你可以根据实际情况选择合适的方式。查找结果会清晰地显示在界面上,方便你查看和定位。

2.替换:不仅可以查找文本,还能进行批量替换操作。当你需要修改文档中的多处相同内容时,替换功能将大大提高你的工作效率。你可以指定要替换的内容和替换后的新内容,一键完成替换操作。

(五)自动保存与备份
为了防止因意外情况导致数据丢失,Python 记事本具备自动保存功能。它会在你编辑过程中定期自动保存文件,确保你的工作成果得到及时保护。此外,还支持手动备份文件,你可以将重要的文件备份到指定位置,以备不时之需。

(六)黑夜模式

1、视觉效果方面

1.降低屏幕亮度
在夜晚或低光环境下,减少屏幕发出的强光对眼睛的刺激。你可以更加舒适地查看和编辑代码,而不会感到过于刺眼。

2.深色主题
通常采用黑色或深色的背景颜色,搭配浅色的文本。这种颜色组合可以减少眼睛的疲劳感,尤其是在长时间使用时。例如,黑色背景可以降低屏幕的整体亮度,而浅色的代码文本则更加突出,易于阅读。

2、功能影响方面
1.提高专注度
深色的界面可以减少视觉干扰,让你更专注于代码的编写。没有过多的亮色和繁杂的图案,你可以将注意力集中在代码逻辑和问题解决上。

2.可能节省电量
对于一些设备,深色主题可能会降低屏幕的功耗,从而在一定程度上节省电量。这对于使用笔记本电脑等移动设备进行 Python 开发的人来说是一个额外的好处。


二.源码展示

在使用源码之前,确保您已经安装Python及运行所需库

1.Python下载链接:点我跳转
2.确保您安装以下库

tkinter

ttkbootstrap

如果没有

请在cmd或PowerShell输入以下代码

tkinter:

pip install tk

ttkbootstrap:

pip install ttkbootstrap

以下是源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
import tkinter as tk
from tkinter import messagebox, filedialog, scrolledtext, simpledialog
from ttkbootstrap import Style
import tkinter.font as tkfont


class SimpleTextEditor:
def __init__(self, root):
self.root = root
self.root.title("记事本")
self.root.geometry("800x600")

# 设置窗口图标(如果图标文件存在)
try:
self.root.iconbitmap('bitbug_favicon.ico')
except Exception as e:
print(f"无法设置图标: {e}")

# 设置主题
self.style = Style(theme='journal')

# 创建主文本区域
self.current_font = ('Helvetica', 12)
self.text_area = scrolledtext.ScrolledText(root, wrap='word', font=self.current_font)
self.text_area.pack(expand=True, fill='both')
self.show_welcome()

# 文件路径初始化
self.file_path = None

# 自动保存状态变量
self.auto_save_enabled = tk.BooleanVar(value=True) # 默认启用自动保存

# 创建菜单栏
self.menu_bar = tk.Menu(root)
self.create_menus()
self.root.config(menu=self.menu_bar)

# 创建状态栏
self.create_status_bar()

# 绑定更新状态栏的方法到 ScrolledText
self.text_area.bind("<KeyRelease>", self.update_status_bar)

# 初始化主题
self.dark_mode = False
self.update_theme()

# 启动自动保存
self.auto_save_interval = 3000 # 每 3 秒自动保存一次
if self.auto_save_enabled.get():
self.start_auto_save()

def create_status_bar(self):
"""创建状态栏以显示行,列和单词数"""
self.status_bar = tk.Frame(self.root, bd=1, relief=tk.SUNKEN)
self.status_bar.pack(side=tk.BOTTOM, fill=tk.X)

self.col_label = tk.Label(self.status_bar, text="列: 0", anchor=tk.W)
self.col_label.pack(side=tk.LEFT)

self.row_label = tk.Label(self.status_bar, text="行: 0", anchor=tk.CENTER)
self.row_label.pack(side=tk.LEFT, expand=True, fill=tk.X)

self.word_label = tk.Label(self.status_bar, text="字数: 0", anchor=tk.E)
self.word_label.pack(side=tk.RIGHT)

def create_menus(self):
"""创建菜单项"""
self.create_file_menu()
self.create_edit_menu()
self.create_view_menu()
self.create_help_menu()

def show_welcome(self):
"""显示欢迎信息于文本区域"""
welcome_message = "欢迎来到更好的文本编辑器!\n通过菜单打开或创建文本文件。\n请转到查看更多详情。"
self.text_area.insert(tk.END, welcome_message)

def new_file(self):
"""创建新文件"""
if self.confirm_save_changes():
self.text_area.delete(1.0, tk.END)
self.show_welcome()
self.file_path = None
if self.auto_save_enabled.get():
self.start_auto_save()

def open_file(self):
"""打开现有的文件"""
if self.confirm_save_changes():
file_path = filedialog.askopenfilename()
if file_path:
try:
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
self.text_area.delete(1.0, tk.END)
self.text_area.insert(tk.END, content)
self.file_path = file_path
if self.auto_save_enabled.get():
self.start_auto_save()

except Exception as e:
messagebox.showerror("错误", f"无法打开文件: {e}")

def save_file(self):
"""保存当前文件"""
if self.file_path:
try:
with open(self.file_path, 'w', encoding='utf-8') as file:
content = self.text_area.get(1.0, tk.END)
file.write(content)
except Exception as e:
messagebox.showerror("错误", f"无法保存文件: {e}")
else:
self.save_as_file()

def save_as_file(self):
"""另存为"""
file_path = filedialog.asksaveasfilename(
defaultextension=".txt",
filetypes=[("文本文件", "*.txt"), ("所有文件", "*.*")]
)
if file_path:
try:
with open(file_path, 'w', encoding='utf-8') as file:
content = self.text_area.get(1.0, tk.END)
file.write(content)
self.file_path = file_path
except Exception as e:
messagebox.showerror("错误", f"无法另存为: {e}")

def confirm_save_changes(self):
"""确认是否保存更改"""
if self.text_area.edit_modified():
response = messagebox.askyesnocancel("提示", "当前文件有未保存的更改,是否保存?")
if response is True:
self.save_file()
return response is not None
return True

def find(self):
"""查找文本中的关键字"""
search_query = simpledialog.askstring("查找", "输入要查找的关键词:", parent=self.root)
if search_query:
start_index = '1.0'
end_index = self.text_area.index(tk.END)
self.text_area.tag_remove('highlight', '1.0', tk.END)
count = 0
found_index = None

while True:
start_index = self.text_area.search(search_query, start_index, nocase=1, stopindex=end_index)
if not start_index:
break
end_index = f"{start_index}+{len(search_query)}c"
self.text_area.tag_add('highlight', start_index, end_index)
self.text_area.tag_config('highlight', background='yellow')

if not found_index:
found_index = start_index
start_index = self.text_area.index(end_index)
count += 1

if found_index and count > 0:
self.text_area.see(found_index)

messagebox.showinfo("查找结果", f"找到 {count} 个 '{search_query}'" if count > 0 else "没有找到关键词")

def copy(self):
"""复制选中的文本"""
try:
selection = self.text_area.selection_get()
self.root.clipboard_clear()
self.root.clipboard_append(selection)
except tk.TclError:
messagebox.showerror("错误", "没有选中任何内容来复制")

def cut(self):
"""剪切选中的文本"""
try:
selection = self.text_area.selection_get()
self.root.clipboard_clear()
self.root.clipboard_append(selection)
self.text_area.delete(tk.SEL_FIRST, tk.SEL_LAST)
except tk.TclError:
messagebox.showerror("错误", "没有选中任何内容来剪切")

def paste(self):
"""粘贴剪贴板内容"""
try:
content = self.root.clipboard_get()
self.text_area.insert(tk.INSERT, content)
except tk.TclError:
messagebox.showerror("错误", "剪贴板为空,无法粘贴")

def update_status_bar(self, event=None):
"""更新状态栏的行,列和字数信息"""
cursor_position = self.text_area.index(tk.INSERT)
row, col = map(int, cursor_position.split('.'))
self.row_label.config(text=f"行: {row + 1}")
self.col_label.config(text=f"列: {col + 1}")
content = self.text_area.get(1.0, tk.END)
word_count = len(content.split())
self.word_label.config(text=f"字数: {word_count}")

def create_file_menu(self):
"""创建文件菜单"""
file_menu = tk.Menu(self.menu_bar, 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_separator()
file_menu.add_command(label="退出", command=self.root.quit)
self.menu_bar.add_cascade(label="文件", menu=file_menu)

def create_edit_menu(self):
"""创建编辑菜单"""
edit_menu = tk.Menu(self.menu_bar, 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_separator()
edit_menu.add_command(label="查找", command=self.find)
self.menu_bar.add_cascade(label="编辑", menu=edit_menu)

def create_view_menu(self):
"""创建视图菜单"""
view_menu = tk.Menu(self.menu_bar, tearoff=0)
view_menu.add_command(label="切换到黑暗模式", command=lambda: self.toggle_theme(force_light=False))
view_menu.add_command(label="切换到白色模式", command=lambda: self.toggle_theme(force_light=True))
view_menu.add_separator()
view_menu.add_checkbutton(label="启用自动保存", onvalue=True, offvalue=False, variable=self.auto_save_enabled,
command=self.toggle_auto_save)
self.menu_bar.add_cascade(label="视图", menu=view_menu)

def toggle_theme(self, force_light=False):
"""切换主题"""
self.dark_mode = not force_light and not self.dark_mode
self.update_theme()

def update_theme(self):
"""更新主题"""
if self.dark_mode:
self.style.theme_use('darkly')
else:
self.style.theme_use('journal')

def create_help_menu(self):
"""创建帮助菜单"""
help_menu = tk.Menu(self.menu_bar, tearoff=0)
help_menu.add_command(label="查看帮助", command=self.view_help)
help_menu.add_separator()
help_menu.add_command(label="关于", command=self.show_about)
self.menu_bar.add_cascade(label="帮助", menu=help_menu)

def show_about(self):
"""显示关于信息"""
about_window = tk.Toplevel(self.root)
about_window.title("关于")
about_label = tk.Label(about_window, text="简易文本编辑器\n版本: 1.0\n作者: ERTJ\n感谢您的使用!\nvolta-os.github.io")
about_label.pack(padx=30, pady=30)
try:
about_window.iconbitmap('bitbug_favicon.ico')
except Exception as e:
print(f"无法设置图标: {e}")

def view_help(self):
"""显示帮助信息"""
help_window = tk.Toplevel(self.root)
help_window.title("帮助")
help_text = """
简易文本编辑器使用说明:
- 文件菜单:
- 新建:清除当前文本内容并显示欢迎信息。
- 打开:从文件系统中选择一个文本文件并加载到编辑器中。
- 保存:将编辑器中的内容保存到文件中。
- 另存为:将编辑器中的内容保存到新文件中。
- 退出:关闭应用程序。
- 编辑菜单:
- 复制:将选中的文本复制到剪贴板。
- 粘贴:将剪贴板中的内容粘贴到编辑器中。
- 剪切:将选中的文本剪切到剪贴板,并从编辑器中删除。
- 查找:在文本中查找特定关键词。
- 视图菜单:
- 切换到黑暗模式/白色模式:更改应用程序的主题。
- 启用自动保存:开启或关闭自动保存功能。
更多请访问 volta-os.github.io
"""
help_label = tk.Label(help_window, text=help_text, justify=tk.LEFT)
help_label.pack(padx=10, pady=10)

def auto_save(self):
"""自动保存功能"""
if self.file_path and self.auto_save_enabled.get():
self.save_file()
self.start_auto_save() # 重新启动定时器

def start_auto_save(self):
"""启动自动保存"""
self.root.after(self.auto_save_interval, self.auto_save)

def stop_auto_save(self):
"""停止自动保存"""
self.root.after_cancel(self.auto_save)

def toggle_auto_save(self):
"""切换自动保存功能"""
if self.auto_save_enabled.get():
self.start_auto_save()
else:
self.stop_auto_save()


if __name__ == "__main__":
root = tk.Tk()
editor = SimpleTextEditor(root)
root.mainloop()

打包软件下载

软件下载地址 :点我跳转

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2024 VoltaOS创作团队
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信