Python Tkinter對(duì)話框控件使用詳解
除了基本的控件之外,Tkinter 還提供了三種對(duì)話框控件:
文件選擇對(duì)話框:filedailog
顏色選擇對(duì)話框:colorchooser
消息對(duì)話框:messagebox
這些對(duì)話框的使用能夠在一定程度上增強(qiáng)用戶的交互體驗(yàn),下面對(duì)這些對(duì)話框控件進(jìn)行詳細(xì)地介紹。
文件選擇對(duì)話框
文件對(duì)話框在 GUI 程序中經(jīng)常的使用到,比如上傳文檔需要從本地選擇一個(gè)文件,包括文件的打開和保存功能都需要一個(gè)文件對(duì)話框來實(shí)現(xiàn)。Tkinter 提供文件對(duì)話框被封裝在tkinter.filedailog模塊中,該模塊提供了有關(guān)文件對(duì)話框的常用函數(shù),經(jīng)常使用的有以下幾個(gè):
| 方法 | 說明 |
|---|---|
| Open() | 打開個(gè)某個(gè)文件 |
| SaveAs() | 打開一個(gè)保存文件的對(duì)話框 |
| askopenfilename() | 打開某個(gè)文件,并以包函文件名的路徑作為返回值 |
| askopenfilenames() | 同時(shí)打開多個(gè)文件,并以元組形式返回多個(gè)文件名 |
| askopenfile() | 打開文件,并返回文件流對(duì)象 |
| askopenfiles() | 打開多個(gè)文件,并以列表形式返回多個(gè)文件流對(duì)象 |
| asksaveasfilename() | 選擇以什么文件名保存文件,并返回文件名 |
| asksaveasfile() | 選擇以什么類型保存文件,并返回文件流對(duì)象 |
| askdirectory | 選擇目錄,并返回目錄名 |
上述方法的常用參數(shù)值如下所示:
| 參數(shù) | 說明 |
|---|---|
| defaultextension | 指定文件的后綴名,當(dāng)保存文件時(shí)自動(dòng)添加文件名,如果自動(dòng)添加了文件的后綴名,則該選項(xiàng)值不會(huì)生效 |
| filetypes | 指定篩選文件類型的下拉菜單選項(xiàng),該選項(xiàng)值是由 2 元祖構(gòu)成的列表,其中每個(gè)二元祖由兩部分組成 (類型名,后綴),比如 filetypes = [("PNG","*.png"), ("JPG", "*.jpg"), ("GIF","*.gif"),("文本文件","*.txt")...] |
| initialdir | 指定打開/保存文件的默認(rèn)路徑,默認(rèn)路徑是當(dāng)前文件夾 |
| parent | 如果不指定該選項(xiàng),那么對(duì)話框默認(rèn)顯示在根窗口上,通過設(shè)置該參數(shù)可以使得對(duì)話框顯示在子窗口上 |
| title | 指定文件對(duì)話框的標(biāo)題 |
下面看一組具體的實(shí)例應(yīng)用:
from tkinter import *
import tkinter.filedialog # 注意次數(shù)要將文件對(duì)話框?qū)?
# 定義一個(gè)處理文件的相關(guān)函數(shù)
def askfile():
# 從本地選擇一個(gè)文件,并返回文件的目錄
filename = tkinter.filedialog.askopenfilename()
if filename != '':
lb.config(text= filename)
else:
lb.config(text='您沒有選擇任何文件')
root = Tk()
root.config(bg='#87CEEB')
root.title("C語(yǔ)言中文網(wǎng)")
root.geometry('400x200+300+300')
root.iconbitmap('C:/Users/Administrator/Desktop/C語(yǔ)言中文網(wǎng)logo.ico')
btn=Button(root,text='選擇文件',relief=RAISED,command=askfile)
btn.grid(row=0,column=0)
lb = Label(root,text='',bg='#87CEEB')
lb.grid(row=0,column=1,padx=5)
# 顯示窗口
root.mainloop()程序運(yùn)行結(jié)果:

圖1:文件選擇界面
下面再看一組“保存文件”的示例代碼如下:
import tkinter as tk
from tkinter import filedialog
from PIL import Image
def open_img():
try:
global img
filepath = filedialog.askopenfilename() # 打開文件,返回該文件的完整路徑
filename.set(filepath)
img = Image.open(filename.get())
except Exception as e:
print("您沒有選擇任何文件",e)
def save_png():
try:
filetypes = [("PNG","*.png"), ("JPG", "*.jpg"), ("GIF","*.gif"),("txt files","*.txt"),('All files','*')]
# 返回一個(gè) pathname 文件路徑字符串,如果取消或者關(guān)閉則返回空字符,返回文件如何操作是后續(xù)代碼的事情,
# 該函數(shù)知識(shí)返回選擇文件的文件名字,不具備保存文件的能力
filenewpath= filedialog.asksaveasfilename(title='保存文件',
filetypes=filetypes,
defaultextension='.png',
initialdir='C:/Users/Administrator/Desktop' )
path_var.set(filenewpath)
# 保存文件
img.save(str(path_var.get()))
except Exception as e:
print(e)
window = tk.Tk()
window.title("C語(yǔ)言中文網(wǎng)")
window.geometry('400x200+300+300')
window.iconbitmap('C:/Users/Administrator/Desktop/C語(yǔ)言中文網(wǎng)logo.ico')
filename = tk.StringVar()
path_var = tk.StringVar()
# 定義讀取文件的組件
entry = tk.Entry(window, textvariable=filename)
entry.grid(row=1, column=0, padx=5, pady=5)
tk.Button(window, text='選擇文件', command=open_img).grid(row=1, column=1, padx=5, pady=5)
# 定義保存文件的組件
entry1 = tk.Entry(window, textvariable=path_var)
entry1.grid(row=2, column=0, padx=5, pady=5)
tk.Button(window, text='保存文件', command=save_png).grid(row=2, column=1, padx=5, pady=5)
window.mainloop()程序運(yùn)行結(jié)果:

圖2:程序運(yùn)行結(jié)果
顏色選擇對(duì)話框
顏色選擇對(duì)話框(colorchooser),提供了一個(gè)非常友善的顏色面板,它允許用戶選擇自己所需要的顏色。 當(dāng)用戶在面板上選擇一個(gè)顏色并按下“確定”按鈕后,它會(huì)返回一個(gè)二元祖,其第 1 個(gè)元素是選擇的 RGB 顏色值,第 2 個(gè)元素是對(duì)應(yīng)的 16 進(jìn)制顏色值。
顏色選擇對(duì)話款主要應(yīng)用在畫筆、涂鴉等功能上,通過它可以繪制出五彩繽紛的顏色,該對(duì)話框的使用非常簡(jiǎn)單,主要有以下兩個(gè)常用方法:
| 方法 | 說明 |
|---|---|
| askcolor() | 打開一個(gè)顏色對(duì)話框,并將用戶選擇的顏色值以元組的形式返回(沒選擇返回None),格式為((R, G, B), "#rrggbb") |
| Chooser() | 打開一個(gè)顏色對(duì)話框,并用戶選擇顏色確定后,返回一個(gè)二元組,格式為((R, G, B), "#rrggbb") |
常用的顏色對(duì)話框的參數(shù)值如下表所示:
| 屬性 | 說明 |
|---|---|
| default | 要顯示的初始的顏色,默認(rèn)顏色是淺灰色(light gray) |
| title | 指定顏色選擇器標(biāo)題欄的文本,默認(rèn)標(biāo)題為“顏色” |
| parent | 1. 如果不指定該選項(xiàng),那么對(duì)話框默認(rèn)顯示在根窗口上 2. 如果想要將對(duì)話框顯示在子窗口上,那么可以設(shè)置 parent = 子窗口對(duì)象 |
下面看一組簡(jiǎn)單的使用示例:
import tkinter as tk
from tkinter import colorchooser
root = tk.Tk()
root.title("顏色選擇")
root.geometry('400x200+300+300')
root.iconbitmap('C:/Users/Administrator/Desktop/C語(yǔ)言中文網(wǎng)logo.ico')
def callback():
# 打開顏色對(duì)話款
colorvalue = tk.colorchooser.askcolor()
# 在顏色面板點(diǎn)擊確定后,會(huì)在窗口顯示二元組顏色值
lb.config(text='顏色值:'+ str(colorvalue))
lb=tk.Label(root,text='',font=('宋體',10))
# 將label標(biāo)簽放置在主窗口
lb.pack()
tk.Button(root, text="點(diǎn)擊選擇顏色", command=callback, width=10, bg='#9AC0CD').pack()
# 顯示界面
root.mainloop()顏色對(duì)話框如下所示:

圖3:tkinter顏色對(duì)話框
上述程序的運(yùn)行結(jié)果如下:

圖4:程序運(yùn)行結(jié)果
消息對(duì)話框
關(guān)于消息對(duì)話款(messagebox),在前面介紹其他控件時(shí)已經(jīng)使用過,在本節(jié)僅對(duì)它做簡(jiǎn)單介紹。
消息對(duì)話框主要起到信息提示、警告、說明、詢問等作用,通常配合“事件函數(shù)”一起使用,比如執(zhí)行某個(gè)操作出現(xiàn)了錯(cuò)誤,然后彈出錯(cuò)誤消息提示框。通過使用消息對(duì)話框可以提升用戶的交互體驗(yàn),也使得 GUI 程序更加人性化。消息對(duì)話框主要包含了以下常用方法:
| 方法 | 說明 |
|---|---|
| askokcancel(title=None, message=None) | 打開一個(gè)“確定/取消”的對(duì)話框 |
| askquestion(title=None, message=None) | 打開一個(gè)“是/否”的對(duì)話框。 |
| askretrycancel(title=None, message=None) | 打開一個(gè)“重試/取消”的對(duì)話框 |
| askyesno(title=None, message=None) | 打開一個(gè)“是/否”的對(duì)話框 |
| showerror(title=None, message=None) | 打開一個(gè)錯(cuò)誤提示對(duì)話框 |
| showinfo(title=None, message=None) | 打開一個(gè)信息提示對(duì)話框 |
| showwarning(title=None, message=None) | 打開一個(gè)警告提示對(duì)話框 |
上述方法擁有相同的選項(xiàng)參數(shù),如下表所示:
| 屬性 | 說明 |
|---|---|
| default | 1. 設(shè)置默認(rèn)的按鈕(也就是按下回車響應(yīng)的那個(gè)按鈕) 2. 默認(rèn)是第一個(gè)按鈕(像“確定”,“是”或“重試”) 3. 可以設(shè)置的值根據(jù)對(duì)話框函數(shù)的不同,可以選擇 CANCEL,IGNORE,OK,NO,RETRY 或 YES |
| icon | 1. 指定對(duì)話框顯示的圖標(biāo) 2. 可以指定的值有:ERROR,INFO,QUESTION 或 WARNING 3. 注意:不能指定自己的圖標(biāo) |
| parent | 1. 如果不指定該選項(xiàng),那么對(duì)話框默認(rèn)顯示在根窗口上 2. 如果想要將對(duì)話框顯示在子窗口上,那么可以設(shè)置 parent= 子窗口對(duì)象 |
上述方法的返回值一般會(huì)是一個(gè)布爾值,或者是“YES”,“NO”,“OK”等,這些方法使用較為簡(jiǎn)單,此處不進(jìn)行逐一列舉,看個(gè)簡(jiǎn)單的示例即可:
import tkinter.messagebox
result=tkinter.messagebox.askokcancel ("提示"," 你確定要關(guān)閉窗口嗎? ")
# 返回布爾值參數(shù)
print(result)程序運(yùn)行結(jié)果:

圖5:消息對(duì)話框
到此這篇關(guān)于Python Tkinter對(duì)話框控件使用詳解的文章就介紹到這了,更多相關(guān)Python Tkinter對(duì)話框控件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于python實(shí)現(xiàn)requests接口測(cè)試的問題
requests是一個(gè)很實(shí)用的Python HTTP客戶端庫(kù),Requests是Python語(yǔ)言的第三方的庫(kù),專門用于發(fā)送HTTP請(qǐng)求,這篇文章主要介紹了python實(shí)現(xiàn)requests接口測(cè)試,需要的朋友可以參考下2021-10-10
分析并輸出Python代碼依賴的庫(kù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了分析并輸出Python代碼依賴的庫(kù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-08-08
在linux下實(shí)現(xiàn) python 監(jiān)控usb設(shè)備信號(hào)
今天小編就為大家分享一篇在linux下實(shí)現(xiàn) python 監(jiān)控usb設(shè)備信號(hào),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07
python實(shí)現(xiàn)微信自動(dòng)回復(fù)機(jī)器人功能
wxpy基于itchat,使用了 Web 微信的通訊協(xié)議,通過大量接口優(yōu)化提升了模塊的易用性,并進(jìn)行豐富的功能擴(kuò)展。這篇文章主要介紹了python實(shí)現(xiàn)微信自動(dòng)回復(fù)機(jī)器人功能,需要的朋友可以參考下2019-07-07
解決python父線程關(guān)閉后子線程不關(guān)閉問題
這篇文章主要介紹了解決python父線程關(guān)閉后子線程不關(guān)閉問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
使用python將微信image下.dat文件解密為.png的方法
這篇文章主要介紹了使用python將微信image下.dat文件解密為.png的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
tensorflow 變長(zhǎng)序列存儲(chǔ)實(shí)例
今天小編就為大家分享一篇tensorflow 變長(zhǎng)序列存儲(chǔ)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01

