python记事本实现查询替换

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()

猜你喜欢

转载自www.cnblogs.com/xuexidememeda/p/11093116.html