Tkinter 為我們提供了三種标準對話框子產品,他們分别是:messagebox、filedialog 和 colorchooser
注:這三個子產品原來是獨立的,分别是 tkMessageBox、tkFileDialog 和 tkColorChooser,需要導入才能使用。在 Python3 之後,這些子產品全部被歸納到 Tkinter 子產品的麾下。
目錄
Messagebox(消息對話框)
函數參數
函數傳回值
filedialog(檔案對話框)
函數參數
函數傳回值
colorchooser(顔色對話框)
函數參數
函數傳回值
FAQ
Messagebox(消息對話框)
下文為你列出了使用 messagebox 可以建立的所有标準對話框樣式:
from tkinter import messagebox
#import tkinter.messagebox
from tkinter import *
print(messagebox.askokcancel('messagebox', 'Demo one'))
#有傳回值,點‘确定’傳回True,點‘取消’傳回False。後序可以有對傳回值的操作進行下一步
mainloop()
使用函數和對話框樣式
askokcancel(item, message, options) | |
askquestion(title, message, options) | |
askretrycancel(title, message, options) | |
askyesno(title, message, options) | |
showerror(title, message, options) | |
showinfo(title, message, options) | |
showwarning(title, message, options) |
函數參數
所有的這些函數都有相同的參數:
title參數設定标題欄的文本 |
message參數設定對話框的主要内容,可以使用'\n'來進行換行 |
options參數可以設定的選項和含義如下表 |
options參數選項 | 含義 |
---|---|
default | --設定預設的按鈕(也就是按下回車響應的那個按鈕) --預設是第一個按鈕(像‘确定’,‘是’或‘重試’) --可以設定的值根據對話框的不同可以進行選擇:CANCEL、IGNORE、OK、NO、RETRY或YES |
icon | --指定對話框顯示的圖示 --可以指定的值有:ERROR、INFO、QUESTION或WARNING --注意:不能自己指定自己的圖示(不可自定義圖示) |
parent | --如果不指定該選項,那麼對話框預設顯示在根視窗上 --如果想要講對話框顯示在子視窗w上,那麼可以設定parent=w |
函數傳回值
askokcancel()、askretrycancel() 和 askyesno() 傳回布爾類型的值:
--傳回 True 表示使用者點選了 ‘确定’ 或 ‘是’ 按鈕
--傳回 False 表示使用者點選了 ‘取消’ 或 ‘否’ 按鈕
askquestion() 傳回 ‘yes’ 或 ‘no’ 字元串表示使用者點選了 ‘是’ 或 ‘否’ 按鈕
showerror()、showinfo() 和 showwarning() 傳回 ‘ok’ 表示使用者按下了 ‘是’ 按鈕
filedialog(檔案對話框)
當你的應用程式需要使用打開檔案或儲存檔案的功能時,檔案對話框顯得尤為重要。emmm,印象裡Java好像也有個元件還是函數可以幾行實作。
#from tkinter import filedialog
import tkinter.filedialog
from tkinter import *
root = Tk()
def callback():
fileName = filedialog.askopenfilename()
print(fileName)
Button(root, text='打開檔案', command=callback).pack()
mainloop()
filedialog 子產品提供了兩個函數:askopenfilename(**options) 和 asksaveasfilename(**options),分别用于打開檔案和儲存檔案。
函數參數
兩個函數可供設定的選項是一樣的,下面列舉了可用選項及含義:
可用選項 | 含義 |
---|---|
defaultextension | --指定檔案的字尾 --例如:defaultextension='.jpg',那麼當使用者輸入一個檔案名'Python'的時候,檔案名會自動添加字尾為'Python.jpg' --注意:如果使用者輸入檔案名包含字尾,那麼該選項不生效 |
filetypes | --指定篩選檔案類型的下拉菜單選項 --該選項的值是由二進制組構成的清單 --每個二進制組是由(類型名,字尾)構成,例如:filetypes=[('PNG', '.png'), ('JPG', '.jpg'), ('GIF', '.gif')] |
initialdir | --指定打開儲存檔案的預設路徑 --預設路徑是目前檔案夾 |
parent | --如果不指定該選項,那麼對話框預設顯示在根視窗上 --如果想要将對話框顯示在子視窗w上,那麼可以設定parent=w |
title | --指定檔案對話框的标題欄文本 |
filetypes圖解:
函數傳回值
1.如果使用者選擇了一個檔案,那麼傳回值是該檔案的完整路徑
2.如果使用者點選了取消按鈕,那麼傳回值是空字元串
colorchooser(顔色對話框)
顔色對話框提供了一個友善的界面讓使用者選擇需要的顔色。
from tkinter import colorchooser
from tkinter import *
root =Tk()
def callback():
fileName = colorchooser.askcolor()
print(fileName)
Button(root, text='選擇顔色', command=callback).pack()
mainloop()
colorchooser 子產品提供了一個函數 askcolor(color, option=value, ...)
函數參數
參數 | 含義 |
---|---|
color | --要顯示的初始的顔色(下圖四個紅箭頭指的地方) --預設顔色是淺灰色(light gray) |
parent | --如果不指定該選項,那麼對話框預設顯示在根視窗上 --如果想要将對話框顯示在子視窗w上,那麼可以設定parent=w |
title | --指定顔色選擇器标題欄的文本 --預設标題是“顔色” |
“預設顔色”圖解:
函數傳回值
1. 如果使用者點選的 ‘确定’ 按鈕,傳回值是一個二進制組 (triple, color),其中的 triple 是一個三元組 (R, G, B)--其中 R, G, B 的範圍是 [0, 255](就是該顔色的 RGB 顔色),第二個參數選中顔色的 16 進制的值
2. 如果使用者點選的 ‘取消’ 按鈕,傳回值是(None, None)
Q&A
可能有人會比較好奇為什麼要這樣寫:
from tkinter import colorchooser
from tkinter import *
其中的 from tkinter import * 難道沒有包含 from tkinter import colorchooser 嗎?
經過嘗試我們會發現,還必須加上 from tkinter import colorchooser 這段代碼,否則會報錯。
首先我們得對 Python 的 module 和 package 這兩個概念有所了解,看 SO 上的這個問題:difference between a Python module and a Python package
簡單歸納如下
- 任何一個 Python 檔案都是一個都是一個 module,module 名稱是沒有 .py 擴充名的那部分。比如說有一個 a.py 的 Python 檔案,那麼這個檔案就是一個 module,module 的名稱是 a。我們可以通過 import a 來導入這個 module。
- package 是很多 module 的集合。可以将 package 看成一個檔案夾。将 package 和一個含有很多 .py 檔案的檔案夾區分開來的标準是 package 還有一個額外的 __init__.py。
可以參考 sof 上的這個提問: whats the diference between from tkinter import * and from tkinter import 'module'
下面是我對第一個連結最高贊的一個簡單的概述:
當我們 import package 的時候,隻是 import 了 package 的 __init__.py 中的 variables/functions/classes,而沒有 import package 包含的 module。
是以如果我們想要使用 module 中的變量、函數、類,就得具體指明是哪個 module。