在tkinter中有三种标准对话框:
之前我们说了 messagebox 消息对话框,再来认识认识 filedialog 对话框。
如果你的应用程序会需要到打开文件、保存文件、选择目录等关于文件的操作,那么就必须要用到 filedialog 。
下面是所有的 filedialog 的函数。
函数 | 用法 |
---|---|
asksaveasfilename() | 选择以什么文件名保存,返回文件名 |
asksaveasfile() | 选择以什么文件保存,创建文件并返回文件流对象 |
askopenfilename() | 选择打开什么文件,返回文件名 |
askopenfile() | 选择打开什么文件,返回IO流对象 |
askopenfiles() | 选择打开多个文件,以列表形式返回多个IO流对象 |
askdirectory() | 选择目录,返回目录名 |
看上去 filedialog 中的函数挺多的,但是我们常用的也就不外乎 askopenfilename 打开文件、asksaveasfilename 保存文件,顶多加上个askdirectory 选择目录。
我们通过一个实际案例,来看看我们常用的 filedialog 函数是怎么使用的。
import tkinter as tk
from tkinter.filedialog import *
from PIL import Image
def selectFile():
global img
filepath = askopenfilename() # 选择打开什么文件,返回文件名
filename.set(filepath) # 设置变量filename的值
img = Image.open(filename.get()) # 打开图片
def outputFile():
outputFilePath = askdirectory() # 选择目录,返回目录名
outputpath.set(outputFilePath) # 设置变量outputpath的值
def fileSave():
filenewpath = asksaveasfilename(defaultextension='.png') # 设置保存文件,并返回文件名,指定文件名后缀为.png
filenewname.set(filenewpath) # 设置变量filenewname的值
img.save(str(filenewname.get())) # 设置保存图片
root = tk.Tk()
filename = tk.StringVar()
outputpath = tk.StringVar()
filenewname = tk.StringVar()
# 构建“选择文件”这一行的标签、输入框以及启动按钮,同时我们希望当用户选择图片之后能够显示原图的基本信息
tk.Label(root, text='选择文件').grid(row=1, column=0, padx=5, pady=5)
tk.Entry(root, textvariable=filename).grid(row=1, column=1, padx=5, pady=5)
tk.Button(root, text='打开文件', command=selectFile).grid(row=1, column=2, padx=5, pady=5)
# 构建“选择目录”这一行的标签、输入框以及启动按钮
tk.Label(root, text='选择目录').grid(row=2, column=0, padx=5, pady=5)
tk.Entry(root, textvariable=outputpath).grid(row=2, column=1, padx=5, pady=5)
tk.Button(root, text='点击选择', command=outputFile).grid(row=2, column=2, padx=5, pady=5)
# 构建“保存文件”这一行的标签、输入框以及启动按钮
tk.Label(root, text='保存文件').grid(row=3, column=0, padx=5, pady=5)
tk.Entry(root, textvariable=filenewname).grid(row=3, column=1, padx=5, pady=5)
tk.Button(root, text='点击保存', command=fileSave).grid(row=3, column=2, padx=5, pady=5)
root.mainloop()
运行程序来看一下。
——
下面列出 filedialog 的各个函数可设置的参数以及用法。
参数 | 用法 |
---|---|
defaultextension | 1. 指定文件的后缀;2. 例如:defaultextension=".jpg",那么当用户输入一个文件名 “逆旅鸭” 的时候,文件名会自动添加后缀为 “逆旅鸭.jpg”;3. 注意:如果用户输入文件名包含后缀,那么该选项不生效 |
filetypes | 1. 指定筛选文件类型的下拉菜单选项;2. 该选项的值是由 2 元祖构成的列表;3. 每个 2 元祖由(类型名,后缀)构成,例如:filetypes=[(“PNG”, “.png”), (“JPG”, “.jpg”), (“GIF”, “.gif”)] |
initialdir | 1. 指定打开/保存文件的默认路径;2. 默认路径是当前文件夹 |
parent | 1. 如果不指定该选项,那么对话框默认显示在根窗口上;2. 如果想要将对话框显示在子窗口 w 上,那么可以设置 parent=w |
title | 指定文件对话框的标题栏文本 |
——
asksaveasfilename() 选择以什么文件名保存,返回文件名
asksaveasfile() 选择以什么文件保存,创建文件并返回文件流对象
askopenfilename() 选择打开什么文件,返回文件名
askopenfilenames() 选择打开多个文件,以元组形式返回多个文件名
askopenfile() 选择打开什么文件,返回IO流对象
askopenfiles() 选择打开多个文件,以列表形式返回多个IO流对象
askdirectory() 选择目录,返回目录名
如果用户点击了取消按钮,那么返回值是空字符串