import tkinter as tk
from tkinter.filedialog import *
import os
import tkinter.messagebox
class txt(tk.Tk):
def __init__(self):
super(txt, self).__init__()
self.geometry('600x450+300+200')
self.title('记事本 1.0')
self.main()
def main(self):
# 保存 新建 退出
self.menu1 = tk.Menu(self)
self.menu1.add_command(label='保存', command=lambda: self.save('e'))
self.menu1.add_command(label='新建', command=txt)
self.menu1.add_command(label='打开', command=self.open_file)
self.config(menu=self.menu1)
# 鼠标右键菜单
self.menu2 = tk.Menu(self, tearoff=False)
self.menu2.add_command(label='复制', command=self.copy)
self.menu2.add_command(label='剪切', command=self.cut)
self.menu2.add_command(label='粘贴', command=self.paste)
# 滚动条
scr = tk.Scrollbar(self)
# 多行输入
# undo 开启恢复和撤销操作
# autoseparators 完整的操作结束后自动插入分隔符 不开启
self.text = tk.Text(self, yscrollcommand=scr.set, undo=True, autoseparators=False)
# self.text.insert(tk.END, 'iadsfaf')
# print(self.text.get(1.0, tk.END))
self.text.pack(side='left', fill='both', expand='yes')
scr.pack(side='left', fill='y')
scr.config(command=self.text.yview)
# 组合键 Ctr+s
self.bind('<Control-s>', self.save)
self.text.bind('<Key>', self.callback)
self.text.bind('<Control-Z>', self.undo)
self.text.bind('<Control-Y>', self.redo)
self.text.bind('<Button-3>', self.pop1)
# 关闭窗口触发事件
self.protocol('WM_DELETE_WINDOW', self.dest)
def dest(self):
# print(self.text.get(1.0, tkinter.END))
if self.text.get(1.0, tkinter.END).strip():
n = 1
flag = True
file = os.getcwd()
# os.listdir(file) 返回当前目录下的所有文件
# print(os.listdir(file))
# 避免重复文件名字
while flag:
for i in os.listdir(file):
# print(i)
if i == f'新建文本文档 ({n}).txt':
n += 1
# print(n)
break
else:
flag = False
v = tkinter.messagebox.askyesno(title='文件保存', message='将文件保存到' + file + '\\' + f'新建文本文档 ({n}).txt')
if v:
# 返回当前文件的绝对目录
with open(file + '\\' + f'新建文本文档 ({n}).txt', mode='w', encoding='utf-8') as f:
f.write(self.text.get(1.0, tk.END))
self.destroy()
else:
self.destroy()
else:
self.destroy()
# 撤销
def undo(self, event):
self.text.edit_undo()
# 反撤销
def redo(self, event):
self.text.edit_redo()
# 添加分割线 不会撤销所有
def callback(self, event):
self.text.edit_separator()
# 保存文件
def save(self, event):
filetype = [('Text Files', '*.txt')]
ask = asksaveasfilename(defaultextension='.txt', filetypes=filetype, initialfile='test', title='保存文件')
# print(ask) # 返回文件路径
# print(os.path.basename(ask)) 返回文件名
if ask:
with open(ask, mode='w', encoding='utf-8') as f:
f.write(self.text.get(1.0, tk.END))
tk.messagebox.showinfo('消息', '保存成功')
# 读取txt文件内容
def open_file(self):
filetype = [('Text Files', '*.txt')]
op = askopenfilename(defaultextension='.txt', filetypes=filetype, title='保存文件')
if op:
# 清空原有文件内容
self.text.delete(1.0, tk.END)
with open(op, mode='r', encoding='utf-8') as f:
data = f.read()
self.text.insert(tk.END, data)
# 菜单出现位置
def pop1(self, event):
# 鼠标位置
# print(event.x_root, event.y_root)
self.menu2.post(event.x_root, event.y_root)
# 复制
def copy(self):
try:
# 清除剪切板
self.text.clipboard_clear()
# 标记第一个位置到最后一个位置
copyText = self.text.get(tk.SEL_FIRST, tk.SEL_LAST)
# 添加到剪切板
self.text.clipboard_append(copyText)
except:
pass
# 删除 + 复制 = 剪切
def cut(self):
try:
self.copy()
self.text.delete(tk.SEL_FIRST, tk.SEL_LAST) # 删除选取文字
except:
pass
# 粘贴
def paste(self):
try:
# 读取剪切板的内容
copyText = self.text.selection_get(selection="CLIPBOARD")
# INSERT 光标处插入
self.text.insert(INSERT, copyText)
except:
pass
if __name__ == '__main__':
txt().mainloop()
'''
1.同一目录下相同文件名会覆盖
2.只有保存没有打开
3.
'''
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
python+tkinter实现完整记事本功能,下面是部分代码展示 import tkinter as tk from tkinter.filedialog import * import os import tkinter.messagebox class txt(tk.Tk): def __init__(self): super(txt, self).__init__() self.geometry('600x450+300+200') self.title('记事本 1.0') self.main() def main(self): # 保存 新建 退出 self.menu1 = tk.Menu(self) self.menu1.add_command(label='保存', command=lambda: self.save('e')) self.menu1.add_command(label='新建', command=tx
资源推荐
资源详情
资源评论
收起资源包目录
记事本.zip (1个子文件)
记事本.py 5KB
共 1 条
- 1
资源评论
天天501
- 粉丝: 569
- 资源: 4666
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功