用户:
tq_xyy查看:0 回复:0 评论:0 创建时间:2020-11-29T15:14:36
from pathlib import Path
import tkinter
from tkinter import filedialog
from tkinter import ttk
from tkinter import scrolledtext
__all__ = ['TextBox', 'NotepadMain']
class TextBox(tkinter.Toplevel):
def __init__(self, master=None, text='', title='信息盒子', width=52, height=18):
self.text = text
self.width = width
self.height = height
self.master = master
super().__init__(self.master)
self.title(title)
self._textbox()
self.withdraw()
self.update()
def _textbox(self):
self._text = scrolledtext.ScrolledText(self, width=self.width, height=self.height, font=('', 12))
self._text.insert(1.0, self.text)
self._text.pack()
def show(self):
self.deiconify()
self.mainloop()
class NotepadMain(tkinter.Frame):
def __init__(self, master=None, filename=None):
if master is None:
master = tkinter._default_root
self.master = master
self.plugin = []
self.file = None
super().__init__(master)
self.master.title('记事本')
self.menu()
self.textbox()
if filename is not None:
self.file = Path(filename)
with open(filename, 'r') as f:
data = f.read()
self.loads(data)
def loads(self, data):
self.text.delete(1.0, 'end')
self.text.insert(1.0, data)
def gets(self):
data = self.text.get(1.0, 'end')
return data
def save(self):
if self.file is None:
return self.saveas()
with open(self.file, 'w') as f:
f.write(self.gets())
def saveas(self):
path = filedialog.asksaveasfilename(title='保存', filetypes=[("所有文件", "*.*")])
if not path:
return
self.file = Path(path)
with open(path, 'w') as f:
f.write(self.gets())
def open(self):
path = filedialog.askopenfilename(title='打开')
if not path:
return
self.file = Path(path)
with open(path, 'r') as f:
data = f.read()
self.loads(data)
def menu(self):
self.mainmenu = tkinter.Menu(self)
self.childmenu = tkinter.Menu(self.mainmenu, tearoff=False)
self.mainmenu.add_cascade(label='菜单', menu=self.childmenu)
self.childmenu.add_command(label='打开', command=self.open)
self.childmenu.add_command(label='保存', command=self.save)
self.childmenu.add_command(label='另存为', command=self.saveas)
self.childmenu.add_separator()
self.childmenu.add_command(label='退出', command=self.master.quit)
self.master.config(menu=self.mainmenu)
def textbox(self):
self.text = tkinter.Text(self, font=('', 12))
self.text.pack(side="left", fill="both")
self.scroll = ttk.Scrollbar(self, command=self.text.yview)
self.scroll.pack(side="right", fill="y")
self.text.config(yscrollcommand=self.scroll.set)
def mainloop(self):
for function in self.plugin:
function(self)
self.pack()
self.master.mainloop()
def register(self, function):
self.plugin.append(function)
return function
if __name__ == "__main__":
NotepadMain().mainloop()
# root = tkinter.Tk()
# notepad = NotepadMain(root, filename='hhh.txt')
# @notepad.register
# def showbox(self):
# def showtext():
# box = TextBox(root, '成功')
# box.show()
# btn = tkinter.Menu(self.mainmenu, tearoff=False)
# self.mainmenu.add_cascade(label='显示信息', menu=btn)
# btn.add_command(label='成功', command=showtext)
# self.master.config(menu=self.mainmenu)
# notepad.mainloop()