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.是通过初始化菜单,为菜单添加菜单项,最后将菜单绑定到窗体上。