功能较简单,仅实现文件打开保存,退出,以及字体设置,查找粘贴等等。
打开保存文件用到的是file dialog模块,它有四个比较实用的函数:
filedialog.askopenfilename(***options)
filedialog.askopenfilenames(**options)
filedialog.asksaveasfile(**options)
filedialog.askdirectory(**options)
分别实现文件打开保存,以及获取文件夹路径想进一步了解请参考(简单明了):
https://blog.csdn.net/weixin_44630029/article/details/104399156
粘贴用的是pyperclip模块,模块比较简单实现粘贴复制
pyperclip.copy(‘Hey Hey!’)
pyperclip.paste()
调用就行,详情了解:https://jingyan.baidu.com/article/3aed632ec2522370108091ec.html
里边用到菜单方法先创建实体self.menu = t.Menu(self.root)
最重要的最后要绑定self.root.config(menu=self.menu)
详情了解:https://blog.csdn.net/w15977858408/article/details/104207077?utm_medium=distribute.pc_relevant.none-task-blog-title-6&spm=1001.2101.3001.4242
另外用到了Text 里边的search方法: a = self.entry.search(self.entry_chaozhao.get(), index, ‘end’, exact=True)
以及Text有一个tag方法意义不先定义一个tag,然后在链接self.entry.tag_add(‘search’, a, col) self.entry.tag_config(‘search’,background=‘green’)
格式:
Text.tag_add(“name”,start index,stop index)
然后链接:
Text.tag_config(“name”,操作)
进一步了解详情:https://blog.csdn.net/qq_41556318/article/details/85112829
import tkinter as t
from tkinter import filedialog
import os
import pyperclip
class App:
def __init__(self):
self.root = t.Tk()
self.root.title('文本编辑器')
self.root['height'] = 500
self.root['width'] = 800
self.menu = t.Menu(self.root)
#文件菜单
menu1 = t.Menu(self.menu,tearoff= False) #创建一个菜单实体
menu1.add_command(label='打开',command=self.optin2)
menu1.add_command(label='保存',command=self.optin3)
menu1.add_separator() #创建一个分割线
menu1.add_command(label='退出',command=lambda :self.root.destroy())
self.menu.add_cascade(label='文件', menu=menu1) #创建父菜单
#字体设置菜单
menu2 = t.Menu(self.menu, tearoff=False)
menu2.add_command(label='字体',command=self.option1)
self.menu.add_cascade(label='格式',menu = menu2)
#编辑菜单
menu3 = t.Menu(self.menu,tearoff=False)
menu3.add_command(label='查找',command=self.cahzhao)
menu3.add_command(label='粘贴',command=self.paste)
self.menu.add_cascade(label='编辑',menu=menu3)
self.root.config(menu=self.menu) #用config方法把root窗口和创建好的菜单关联
s1 = t.Scrollbar(self.root, orient=t.VERTICAL)
self.entry = t.Text(self.root, setgrid=True,font=('微软雅黑',12),undo = True,
yscrollcommand=s1.set) #设置编辑框
self.entry.pack()
self.root.mainloop()
def option1(self):
self.ziti_root = t.Tk()
self.ziti_root.title('字体设置')
self.ziti_root.geometry('300x200+200+200')
self.label1 = t.Label(self.ziti_root,text='字体:').pack()
self.ziti = t.Entry(self.ziti_root,width=8)
self.ziti.pack()
self.label2 = t.Label(self.ziti_root,text='大小:').pack()
self.daxiao = t.Entry(self.ziti_root,width=8)
self.daxiao.pack()
self.queding = t.Button(self.ziti_root,text='确定',command=self.ziti_set).pack(pady=2)
self.ziti.mainloop()
def optin2(self):
my_filetypes = [('all files', '.*'), ('text files', '.txt')] #定义文件打开类型在后边作为变量添加进打开文件的操作中
answer = filedialog.askopenfilename(parent=self.root,
initialdir=os.getcwd(),
title="Please select a file:",
filetypes=my_filetypes) #创建打开文件对话框,并赋值。
self.entry.focus() #真正执行打开文件操作
with open(answer,'r+') as fp:
text = fp.read()
self.entry.insert('insert',text)
def optin3(self):
my_filetypes = [('all files', '.*'), ('text files', '.txt')] #定义文件打开类型在后边作为变量添加进打开文件的操作中
answer = filedialog.asksaveasfilename(parent=self.root,
initialdir=os.getcwd(),
title="Please select a file:",
filetypes=my_filetypes) #创建文件保存对话框,并赋值
with open(answer+'.txt','w') as fp:
fp.write(self.entry.get('0.0', 'end')) #执行文件保存操作
def ziti_set(self):
self.entry.tag_add('tag1', '0.0', 'end')
self.entry.tag_config(tagName='tag1', font=(self.ziti.get(), int(self.daxiao.get()))) # 实现设置字体方法
self.ziti_root.destroy()
def cahzhao(self):
self.chazhao = t.Tk()
self.chazhao.geometry('500x80+300+300')
self.chazhao.title('查找')
label = t.Label(self.chazhao,text='查找内容:')
label.grid(row=0,column=0)
self.entry_chaozhao = t.Entry(self.chazhao,width=50)
self.entry_chaozhao.grid(row=0,column=5)
self.entry_chaozhao.focus_set()
button = t.Button(self.chazhao,text='查找',command=self.chazhao_finish)
button.grid(row=0,column=20)
button_reset = t.Button(self.chazhao,text='取消',command=self.text_reset)
button_reset.grid(row=2,column=20)
self.chazhao.mainloop()
def chazhao_finish(self): #定义查找函数并创建新页面
indexall = []
index ='1.0'
end = self.entry.index('end')
if self.entry_chaozhao.get() != '':
a = self.entry.search(self.entry_chaozhao.get(), index, 'end', exact=True)
while a:
row = a.split('.')
col = row[0]+'.'+str(int(row[1])+len(self.entry_chaozhao.get()))
if col not in indexall and float(col) <= float(end):
indexall.append(col)
self.entry.tag_add('search', a, col)
self.entry.tag_config('search',background='green') #
index = row[0]+'.'+str(int(row[1])+len(self.entry_chaozhao.get())+1)
a = self.entry.search(self.entry_chaozhao.get(), index, 'end', exact=True)
def text_reset(self): #定义恢复默认颜色函数
indexall = []
index = '1.0'
end = self.entry.index('end')
if self.entry_chaozhao.get() != '':
a = self.entry.search(self.entry_chaozhao.get(), index, 'end', exact=True)
while a:
row = a.split('.')
col = row[0] + '.' + str(int(row[1]) + len(self.entry_chaozhao.get()))
if col not in indexall and float(col) <= float(end):
indexall.append(col)
self.entry.tag_add('search', a, col)
self.entry.tag_config('search',background='white')
index = row[0] + '.' + str(int(row[1]) + len(self.entry_chaozhao.get()) + 1)
a = self.entry.search(self.entry_chaozhao.get(), index, 'end', exact=True)
def paste(self):
self.entry.insert('insert',pyperclip.paste()) #pyperclip模块的方法,想了解的同学可以查一下
if __name__ == '__main__':
App()