天天看點

魚c筆記——Python 的 GUI 程式設計(十七):Tkinter 的标準對話框子產品 messagebox 、filedialog 和 colorchooser

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)
魚c筆記——Python 的 GUI 程式設計(十七):Tkinter 的标準對話框子產品 messagebox 、filedialog 和 colorchooser
askquestion(title, message, options)
魚c筆記——Python 的 GUI 程式設計(十七):Tkinter 的标準對話框子產品 messagebox 、filedialog 和 colorchooser
askretrycancel(title, message, options)
魚c筆記——Python 的 GUI 程式設計(十七):Tkinter 的标準對話框子產品 messagebox 、filedialog 和 colorchooser
askyesno(title, message, options)
魚c筆記——Python 的 GUI 程式設計(十七):Tkinter 的标準對話框子產品 messagebox 、filedialog 和 colorchooser
showerror(title, message, options)
魚c筆記——Python 的 GUI 程式設計(十七):Tkinter 的标準對話框子產品 messagebox 、filedialog 和 colorchooser
showinfo(title, message, options)
魚c筆記——Python 的 GUI 程式設計(十七):Tkinter 的标準對話框子產品 messagebox 、filedialog 和 colorchooser
showwarning(title, message, options)
魚c筆記——Python 的 GUI 程式設計(十七):Tkinter 的标準對話框子產品 messagebox 、filedialog 和 colorchooser

函數參數

所有的這些函數都有相同的參數:

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()
           
魚c筆記——Python 的 GUI 程式設計(十七):Tkinter 的标準對話框子產品 messagebox 、filedialog 和 colorchooser

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圖解:

魚c筆記——Python 的 GUI 程式設計(十七):Tkinter 的标準對話框子產品 messagebox 、filedialog 和 colorchooser

函數傳回值

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()
           
魚c筆記——Python 的 GUI 程式設計(十七):Tkinter 的标準對話框子產品 messagebox 、filedialog 和 colorchooser

colorchooser 子產品提供了一個函數 askcolor(color, option=value, ...)

函數參數

參數 含義
color

--要顯示的初始的顔色(下圖四個紅箭頭指的地方)

--預設顔色是淺灰色(light gray)

parent

--如果不指定該選項,那麼對話框預設顯示在根視窗上

--如果想要将對話框顯示在子視窗w上,那麼可以設定parent=w

title

--指定顔色選擇器标題欄的文本

--預設标題是“顔色”

“預設顔色”圖解:

魚c筆記——Python 的 GUI 程式設計(十七):Tkinter 的标準對話框子產品 messagebox 、filedialog 和 colorchooser

函數傳回值

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。
魚c筆記——Python 的 GUI 程式設計(十七):Tkinter 的标準對話框子產品 messagebox 、filedialog 和 colorchooser

可以參考 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。

繼續閱讀