python 大作業 自己寫了記事本 也參考網上的 查詢會有點問題 替換沒問題
# encoding=utf-8 from tkinter import * from tkinter.filedialog import * from tkinter.messagebox import * import os '''打開文件的功能目前不是很完善''' filename = '' def author(): showinfo('helo', '兒子') def power(): showinfo('版權信息', '爸爸') def myopen(): global filename filename = askopenfilename(defaultextension='.txt') if filename == '': filename = None else: root.title('linlin-note' + os.path.basename(filename)) textPad.delete(1.0, END) f = open(filename, 'r') textPad.insert(1.0, f.read()) f.close() def new(): global root, filename, textPad root.title('未命名文件') filename = None textPad.delete(1.0, END) def save(): global filename try: f = open(filename, 'w') msg = textPad.get(1.0, 'end') f.write(msg) f.close() except: saveas() def saveas(): f = asksaveasfilename(initialfile='未命名.txt', defaultextension='.txt') global filename filename = f fh = open(f, 'w') msg = textPad.get(1.0, END) fh.write(msg) fh.close root.title('linlin 記事本' + os.path.basename(f)) def cut(): global textPad textPad.event_generate('<<Cht>>') def copy(): global textPad textPad.event_generate('<<Copy>>') def paste(): global textPad textPad.event_generate('<<Paste>>') def undo(): global textPad textPad.event_generate('<<Undo>>') def redo(): global textPad textPad.event_generate('<<Redo>>') def select_all(): global textPad textPad.event_generate('sel', '1.0', 'end') def find(): global root t = Toplevel(root) t.title('查找') # 設置窗口大小 t.geometry('290x70+200+250') t.transient(root) v1=StringVar() Label(t, text='查找/替換:').grid(row=0, column=0, sticky='e') Label(t, text='替換文本:').grid(row=1, column=0) Entry(t, width=20,textvariable=v1).grid(row=1, column=1 ) v = StringVar() e = Entry(t, width=20, textvariable=v)#替換 e.grid(row=0, column=1, padx=2, pady=2, sticky='we') e.focus_set() c = IntVar() #Checkbutton(t, text='不區分大小寫', variable=c).grid(row=1, column=1, sticky='e') Button(t, text='查找所有', command=lambda: search(v.get(), c.get(), textPad, t, e)).grid(row=0, column=2,sticky='e' + 'w', padx=2,pady=2) Button(t, text='替換所有', command=lambda: mytihuan(v1.get(),v.get())).grid(row=1, column=2, padx=2,pady=2) #tihuantext = Text(t, width=3, height=2) def close_search(): textPad.tag_remove('match', '1.0', END) t.destroy() t.protocol('WM_DELETE_WINDOW', close_search) def mytihuan(tihuanwenben,yuanshiwenben): showinfo('helo', "替換成功") find_data = yuanshiwenben.strip() replace_data =tihuanwenben.strip() data = textPad.get(1.0,END) print("finddata"+find_data) data = data.replace(find_data, replace_data) textPad.delete(1.0,END) textPad.insert(1.0,data) #textPad.mark_set(data) def search(needle, cssnstv, textPad, t, e): textPad.tag_remove('match', '1.0', END) count = 0 if needle: pos = '1.0' while True: pos = textPad.search(needle, pos, nocase=cssnstv, stopindex=END) if not pos: break #lastpos=0 lastpos = pos + str(len(needle)) #print(str(len(needle))+"-----"+needle) textPad.tag_add('match', pos, lastpos) count += 1 pos = lastpos textPad.tag_config('match', foreground='yellow', background='green') e.focus_set() t.title(str(count) + '個被匹配') def popup(event): global editmenu editmenu.tk_popup(event.x_root, event.y_root) root = Tk() root.title('記事本') root.geometry('800x800+100+100') menubar = Menu(root) filemenu = Menu(menubar,tearoff=False)#等於false 不顯示上面的------- filemenu.add_command(label='新建', accelerator='Ctrl+N', command=new) filemenu.add_command(label='打開', accelerator='Ctrl+O', command=myopen) filemenu.add_command(label='保存', accelerator='Ctrl+S', command=save) filemenu.add_command(label='另存為', accelerator='Ctrl+Shift+S', command=saveas) menubar.add_cascade(label='文件', menu=filemenu) editmenu = Menu(menubar,tearoff=False)#等於false 不顯示上面的------- editmenu.add_command(label='撤銷', accelerator='Ctrl+Z', command=undo) editmenu.add_command(label='重做', accelerator='Ctrl+Y', command=redo) editmenu.add_separator() editmenu.add_command(label='剪切', accelerator='Ctrl+X', command=cut) editmenu.add_command(label='復制', accelerator='Ctrl+C', command=copy) editmenu.add_command(label='粘貼', accelerator='Ctrl+V', command=paste) editmenu.add_separator() editmenu.add_command(label='查找/替換', accelerator='Ctrl+F', command=find) editmenu.add_command(label='全選', accelerator='Ctrl+A', command=select_all) menubar.add_cascade(label='編輯', menu=editmenu) aboutmenu = Menu(menubar,tearoff=False)#等於false 不顯示上面的------- aboutmenu.add_command(label='作者', command=author) aboutmenu.add_command(label='版權', command=power) menubar.add_cascade(label='關於', menu=aboutmenu) root.config(menu=menubar) # root['menu'] = menubar # shortcutbar = Frame(root, height=25, bg='light sea green') # shortcutbar.pack(expand=NO, fill=X) # lnlabel = Label(root, width=2, bg='antique white') # lnlabel.pack(side=LEFT, anchor='nw', fill=Y) textPad = Text(root, width=90, height=40, selectforeground="black", undo=True, font=50) textPad.pack(expand=YES, fill=BOTH) scroll = Scrollbar(textPad) textPad.config(yscrollcommand=scroll.set) scroll.config(command=textPad.yview) scroll.pack(side=RIGHT, fill=Y) textPad.bind('<Control-N>', new) textPad.bind('<Control-n>', new) textPad.bind('<Control-O>', myopen) textPad.bind('<Control-o>', myopen) textPad.bind('<Control-S>', save) textPad.bind('<Control-s>', save) textPad.bind('<Control-A>', select_all) textPad.bind('<Control-a>', select_all) textPad.bind('<Control-F>', find) textPad.bind('<Control-f>', find) textPad.bind('<Button-3>', popup) root.mainloop()