Python程序设计之GUI(8)

1.关于文件对话框

①包含的包

import tkinter
import tkinter.ttk
#消息框
import tkinter.messagebox
#文件对话框
import tkinter.filedialog
import tkinter.colorchooser
import tkinter.scrolledtext
import tkinter.simpledialog

②对话框的初始化

    #初始化窗体
    myfiledialog=tkinter.Tk()
    myfiledialog.title("FileDialog")
    myfiledialog["width"]=500
    myfiledialog["height"]=500

③创建菜单和菜单项

    #创建菜单
    menu=tkinter.Menu(myfiledialog)
    #创建菜单项
    Filemenu=tkinter.Menu(menu,tearoff=0)
        #编辑菜单
    Editmenu=tkinter.Menu(menu,tearoff=0)
        #关于菜单
    Aboutmenu=tkinter.Menu(menu,tearoff=0)

④菜单的绑定操作

    #创建打开菜单的绑定事件处理函数
    Filemenu.add_command(label="Open",command=Open)
    Filemenu.add_command(label="Sava As",command=SaveAs)
    Filemenu.add_command(label="Close",command=Close)
    Editmenu.add_command(label="Undo",command=Undo)
	Editmenu.add_command(label="Redo",command=Undo)
    Editmenu.add_command(label="Cut",command=Cut)
    Editmenu.add_command(label="Paste",command=Paste)
    Aboutmenu.add_command(label="About",command=About)
    Editmenu.add_command(label="Search",command=Search)
    Filemenu.add_command(label="Save",command=Save)

⑤最后将菜单合并到菜单项并添加到文本框上


    menu.add_cascade(label="File",menu=Filemenu)
    menu.add_cascade(label="Edit",menu=Editmenu)
    menu.add_cascade(label="About",menu=Aboutmenu)
    #将菜单安置到窗体上
    myfiledialog.config(menu=menu)
2.源代码

①完整代码

import tkinter
import tkinter.ttk
import tkinter.messagebox
import tkinter.filedialog
import tkinter.colorchooser
import tkinter.scrolledtext
import tkinter.simpledialog

def main():
    #初始化窗体
    myfiledialog=tkinter.Tk()
    myfiledialog.title("FileDialog")
    myfiledialog["width"]=500
    myfiledialog["height"]=500
    #开始添加部件
    textChanger=tkinter.StringVar(value=0)
    #当前文件名
    filename=''
    #创建菜单
    menu=tkinter.Menu(myfiledialog)
    #创建菜单项
    Filemenu=tkinter.Menu(menu,tearoff=0)

    #声明文本编辑组件
    content=tkinter.scrolledtext.ScrolledText(myfiledialog,wrap=tkinter.WORD)
    content.pack(fill=tkinter.BOTH,expand=tkinter.YES)
    def KeyPress(event):
        textChanger.set(1)
    content.bind('<KeyPress>',KeyPress)

    #操作
    def Open():
        global filename
        #内容改变就先保存内容
        if textChanger.get():
            yesno=tkinter.messagebox.askyesno(title="Save or not",message="Do you want to save?")
            if yesno==tkinter.YES:
                Save()
        filename=tkinter.filedialog.askopenfilename(title="Open a file",type=[("Python files",'*.py|*.txt')])
        if filename:
            #清空内容
            content.delete(0.0,tkinter.END)
            with open(filename,'r') as f:
                content.insert(tkinter.INSERT,''.join(f.readlines()))
            textChanger.set(0)
    #创建打开菜单的绑定事件处理函数
    Filemenu.add_command(label="Open",command=Open)

    def Save():
        global filename
        #判断文件是否存在,不是就创建文件
        if not filename:
            SaveAs()
        elif textChanger.get():
            with open(filename,'w') as f:
                f.write(content.get(0.0,tkinter.END))
            textChanger.set(0)

    Filemenu.add_command(label="Save",command=Save)

    def SaveAs():
        global filename
        #打开另存为窗口
        newfilename=tkinter.filedialog.asksaveasfilename(title="Save As",initialdir="C:\\",initialfile="new.txt")
        #指定文件就保存
        if newfilename:
            with open(newfilename,'w') as f:
                f.write(content.get(0.0,tkinter.END))
            textChanger.set(0)
    Filemenu.add_command(label="Sava As",command=SaveAs)

    #添加分界线
    Filemenu.add_separator()

    def Close():
        global filename
        Save()
        content.delete(0.0,tkinter.END)
        #置空文件名
        filename=''
    Filemenu.add_command(label="Close",command=Close)

    #编辑菜单
    Editmenu=tkinter.Menu(menu,tearoff=0)
    #撤销操作
    def Undo():
        content["undo"]=True
        try:
            content.edit_undo()
        except Exception as e:
            pass
    Editmenu.add_command(label="Undo",command=Undo)
    #还原操作
    def Redo():
        content["redo"]=True
        try:
            content.edit_redo()
        except Exception as e:
            pass
    Editmenu.add_command(label="Redo",command=Undo)
    #复制操作
    def Copy():
        content.clipboard_clear()
        content.clipboard_append(content.selection_get())
    Editmenu.add_command(label="Copy",command=Copy)
    #剪切操作
    def Cut():
        Copy()
        content.delete(tkinter.SEL_FIRST,tkinter.SEL_LAST)
    Editmenu.add_command(label="Cut",command=Cut)

    #粘贴操作
    def Paste():
        #检查是否有复制内容
        try:
            content.insert(tkinter.SEL_FIRST,content.clipboard_get())
            content.delete(tkinter.SEL_FIRST,tkinter.SEL_LAST)
        except Exception as e:
            pass
        content.insert(tkinter.INSERT,content.clipboard_get())
    Editmenu.add_command(label="Paste",command=Paste)
    Editmenu.add_separator()

    def Search():
        insearch=tkinter.simpledialog.askstring(title="Search",prompt="What to search?")
        start=content.search(insearch,0.0,tkinter.END)
        if start:
            tkinter.messagebox.showinfo(title="Found",message="OK")
    Editmenu.add_command(label="Search",command=Search)
    #关于菜单
    Aboutmenu=tkinter.Menu(menu,tearoff=0)
    def About():
        tkinter.messagebox.showinfo(title="About",message="A File Dialog!")
    Aboutmenu.add_command(label="About",command=About)

    menu.add_cascade(label="File",menu=Filemenu)
    menu.add_cascade(label="Edit",menu=Editmenu)
    menu.add_cascade(label="About",menu=Aboutmenu)
    #将菜单安置到窗体上
    myfiledialog.config(menu=menu)


    myfiledialog.mainloop()





if __name__ == '__main__':
    main()

②运行截图
在这里插入图片描述

学习笔记

1.与wxPython的文件对话框初始化不一样;
wxPython窗体文件对话框:
https://blog.csdn.net/qxyloveyy/article/details/104761393
2.是通过初始化菜单,为菜单添加菜单项,最后将菜单绑定到窗体上。

发布了78 篇原创文章 · 获赞 83 · 访问量 5390

猜你喜欢

转载自blog.csdn.net/qxyloveyy/article/details/104866145