#filedialog文件对话框 1.文件流和文件区别 指的是在传递过程中的文件,比如你上传一张图片,那么他不是以一个完整的图片传输的, 是将文件按特定编码的字符传输,这个就是文件流。 2.文件对话框: 打开的是个文件流,可进行读写操作,如word。 askopenfile():打开文件获取单个文件指针,具有open()的作用 askopenfiles():打开对话框,返回多个所选择文件的文件流,程序可通过这些文件流来读取文件内容。 asksaveasfile():生成保存文件的对话框,返回所选择文件的文件输出流,程序可通过该文件输出流向文件写入数据。 打开的是个路径,如告诉压缩软件要压缩文件的路径: askopenfilename():选择 单个文件,获取其路径。 askopenfilenames():选择 多个文件,获取其路径组成的元组。 asksaveasfilename():生成保存文件的对话框,保存压缩文件的路径,返回所选择文件的文件路径。 askdirectory():打开文件夹。 3.上面的用于生成打开文件的对话框的工具函数支持如下选项: title:指定对话框的标题。 filetypes:指定在该文件对话框中能查看的文件类型。该选项值是一个序列,可指定多个文件类型,可以通过“*”指定浏览所有文件。 initialdir:指定初始打开的目录。 initialfile:指定所选择的文件。 defaultextension:指定默认扩展名。当用户没有输入扩展名时,系统会默认添加该选项指定的扩展名。 parent:指定该对话框的属主窗口。不指定,则对话框默认显示在根窗口上。可以指定显示在某个子窗口上。 multiple:指定是否允许多选。
对于打开文件夹的对话框,还额外支持一个 mustexist 选项,该选项指定是否只允许打开己存在的目录。
from tkinter import *
from tkinter import ttk
from tkinter import filedialog
root = Tk()
root.title('文件对话框')
root.resizable(1,1)
topLF = ttk.LabelFrame(root,text='打开文件流')
topLF.pack(side=TOP,fill=X,expand=1,ipadx=5,ipady=5,padx=5,pady=5)
def open_file():
print(filedialog.askopenfile(title='打开单个文件',
filetypes=[("文本文件", "*.txt"), ('Python源文件', '*.py')],
initialdir='c:/',initialfile='test'))
def open_files():
print(filedialog.askopenfiles(title='打开多个文件',
filetypes=[("文本文件", "*.txt"), ('Python源文件', '*.py')],
initialdir='c:/'))
def save_file():
print(filedialog.asksaveasfile(title='保存文件',
filetypes=[("文本文件", "*.txt"), ('Python源文件', '*.py')],
initialdir='c:/'))
Button(topLF,text='打开单个文件',command=open_file).pack(side=LEFT,fill=X,expand=1,ipadx=5,ipady=5,padx=5,pady=5)
Button(topLF,text='打开多个文件',command=open_files).pack(side=LEFT,fill=X,expand=1,ipadx=5,ipady=5,padx=5,pady=5)
Button(topLF,text='保存文件',command=save_file).pack(side=LEFT,fill=X,expand=1,ipadx=5,ipady=5,padx=5,pady=5)
middleLF = ttk.LabelFrame(root,text='获取文件路径')
middleLF.pack(side=TOP,fill=X,expand=1,ipadx=5,ipady=5,padx=5,pady=5)
def open_filename():
print(filedialog.askopenfilename(title='打开单个文件名',
filetypes=[("文本文件", "*.txt"), ('Python源文件', '*.py')],
initialdir='c:/'))
def open_filenames():
print(filedialog.askopenfilenames(title='打开多个文件名',
filetypes=[("文本文件", "*.txt"), ('Python源文件', '*.py')],
initialdir='c:/'))
def save_filename():
print(filedialog.asksaveasfilename(title='保存文件名',
filetypes=[("文本文件", "*.txt"), ('Python源文件', '*.py')],
initialdir='c:/'))
Button(middleLF,text='打开单个文件名',command=open_filename).pack(side=LEFT,fill=X,expand=1,ipadx=5,ipady=5,padx=5,pady=5)
Button(middleLF,text='打开多个文件名',command=open_filenames).pack(side=LEFT,fill=X,expand=1,ipadx=5,ipady=5,padx=5,pady=5)
Button(middleLF,text='保存文件名',command=save_filename).pack(side=LEFT,fill=X,expand=1,ipadx=5,ipady=5,padx=5,pady=5)
bottomLF = ttk.LabelFrame(root,text='打开文件夹')
bottomLF.pack(side=TOP,fill=X,expand=1,ipadx=5,ipady=5,padx=5,pady=5)
def open_dir():
print(filedialog.askdirectory(title='打开文件夹',
initialdir='c:/'))
Button(bottomLF,text='文件夹',command=open_dir).pack(side=LEFT,fill=X,expand=1,ipadx=5,ipady=5)
root.mainloop()