一、filedialog簡介
在tkinter中有三種標準對話框:
- messagebox
- filedialog
- colorchooser
之前我們說了 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()
運行程序來看一下。
- 第一個按鈕是選擇文件,我們選擇了一張圖片,Entry 組件中值爲返回的完整文件名
- 第二個按鈕是選擇目錄,Entry 組件中值爲返回的目錄
- 第三個按鈕是保存文件,我們點開自定義輸入"111",然後我們返回到文件夾就看到我們的原圖就另存爲了一張名爲"111.png"的圖片
三、參數&返回值
——
1. 參數
下面列出 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 | 指定文件對話框的標題欄文本 |
——
2. 返回值
-
asksaveasfilename() 選擇以什麼文件名保存,返回文件名
-
asksaveasfile() 選擇以什麼文件保存,創建文件並返回文件流對象
-
askopenfilename() 選擇打開什麼文件,返回文件名
-
askopenfilenames() 選擇打開多個文件,以元組形式返回多個文件名
-
askopenfile() 選擇打開什麼文件,返回IO流對象
-
askopenfiles() 選擇打開多個文件,以列表形式返回多個IO流對象
-
askdirectory() 選擇目錄,返回目錄名
-
如果用戶點擊了取消按鈕,那麼返回值是空字符串