Python Tk GUI系列筆記(tkinter篇(下)) 第二十四章~第三十二章
〇、前言
此系列主要介紹tkinter庫——Tk圖形用戶界面(GUI)及其相關(guān)內(nèi)容,內(nèi)容參考以下網(wǎng)站:
TkDocs:https://tkdocs.com/(前四十一章)
C語言中文網(wǎng):http://c.biancheng.net/tkinter/(前三十一章)
Python tkinter(GUI編程)模塊最完整教程(上/中/下):(前四十一章)
https://blog.csdn.net/qq_48979387/article/details/125706562
https://blog.csdn.net/qq_48979387/article/details/125806479
https://blog.csdn.net/qq_48979387/article/details/125768994
Python tkinter一些十分靈活的運(yùn)用方式和實(shí)用函數(shù):(第四十二章)
https://blog.csdn.net/qq_48979387/article/details/119695934
tkinter.ttk --- Tk 風(fēng)格的控件:
https://docs.python.org/zh-cn/3.11/library/tkinter.ttk.html(33~41章)
Tcl/Tk文檔:
https://www.tcl.tk/man/tcl8.6/TkCmd/contents.html(前四十二章)
ttkbootstrap:https://ttkbootstrap.readthedocs.io/en/latest/zh/(43~53章)
其他參考會在章節(jié)前列出
部分內(nèi)容來源網(wǎng)絡(luò)
# 操作系統(tǒng)為Windows 7
Python版本3.10,Tk版本8.6
運(yùn)行結(jié)果的窗口圖片會縮放到80%,96 dpi
有些運(yùn)行結(jié)果會使用gif動圖展示,或是有額外的補(bǔ)充文件,需到Python tkinter result文件中的查看
# gif錄制軟件:ScreenToGif
# 此系列的WPS筆記會在本系列的最后一個專欄給出
顏色代表含義:
淡灰色:注釋,一般前面有#
綠色:示例
橙色:補(bǔ)充
紫色:示例中的input用戶輸入內(nèi)容
紅色、藍(lán)色:突出或裝飾文字作用
部分內(nèi)容可能不嚴(yán)謹(jǐn)或者錯誤,歡迎指出
# 如果Python無tkinter可參考這篇專欄cv14759634

二十四、標(biāo)尺控件(Scale)
(1)、概念
標(biāo)尺控件是一根類似標(biāo)尺式的滾動條對象,用戶通過操作它可以直接設(shè)置相應(yīng)的數(shù)值(刻度值)
可以使用鼠標(biāo)左鍵拖動滑塊到一個新的數(shù)值,點(diǎn)擊周圍槽可以將滑塊向上(左)或向下(右)移動一個單位。如果標(biāo)尺控件有焦點(diǎn),則按方向箭頭可以向?qū)?yīng)方向移動一個單位
Ctrl加上或左箭頭則向上或左移動大幅度,反之亦然
Home鍵將滑塊移動到上端或左端,End鍵將滑塊移動到下端或右端
(2)、演示圖

(3)、構(gòu)造方法
tkinter.Scale(master=None, cnf={}, **kw)
(4)、屬性項(xiàng)
activebackground, background, bigincrement, bd, bg, borderwidth, command, cursor, digits, fg, font, foreground, from, highlightbackground, highlightcolor, highlightthickness, label, length, orient, relief, repeatdelay, repeatinterval, resolution, showvalue, sliderlength, sliderrelief, state, takefocus, tickinterval, to, troughcolor, variable, width
1.from, to
# 因?yàn)閒rom是Python的關(guān)鍵字,所以from有別名:from_
使用from和to屬性限制數(shù)值在閉區(qū)間[from, to]。from默認(rèn)值為0.0,to默認(rèn)值為100.0
# from和to可以是浮點(diǎn)數(shù),to的值必須大于from的值
2.orient
當(dāng)值為'horizontal'時標(biāo)尺是水平標(biāo)尺,當(dāng)值為'vertical'(默認(rèn)值)時標(biāo)尺是垂直標(biāo)尺。值可以是它們的縮寫
3.digits
是一個整數(shù),表示將刻度值轉(zhuǎn)換為字符串時保留的有效數(shù)字個數(shù)
# 這里的“有效數(shù)字個數(shù)”是指當(dāng)刻度值為to屬性指定值是的數(shù)字個數(shù)
# 實(shí)測如果值<=0或>17和值為0一樣
示例:
from_=1, to=100, digits=5:


from_=1, to=9, digits=5:


3.1.resolution
指定標(biāo)尺的分辨率(一格的單位)
刻度值顯示值總是屬性項(xiàng)_from加上該值的任意非負(fù)整數(shù)倍
默認(rèn)值為1
4.variable
指定一個控制變量,設(shè)置后控件的刻度值是這個控制變量的值
5.bigincrement
指定標(biāo)尺大幅度移動的量
如果為0(默認(rèn)值),則為標(biāo)尺范圍的1/10
6.label
在標(biāo)尺控件顯示標(biāo)簽并設(shè)置其文本
水平標(biāo)尺會在左上角顯示標(biāo)簽,垂直標(biāo)尺會在右上角顯示標(biāo)簽
7.showvalue
是一個布爾值,表示是否顯示當(dāng)前刻度值
8.length
標(biāo)尺控件的長度,默認(rèn)值100像素
對于水平的是它的寬度,對于垂直的是它的高度
9.sliderlength
指定滑塊的尺寸,單位是像素
10.sliderrelief
指定滑塊的邊框樣式
11.tickinterval
是一個數(shù)字,指定刻度線的間隔數(shù)值
默認(rèn)值為0,表示不顯示刻度線
12.troughcolor
滾動槽的顏色
13.command
是一個函數(shù),在標(biāo)尺刻度值改變時傳入刻度值調(diào)用
(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)
activebackground, background, bg, fg, foreground, highlightbackground, highlightcolor:默認(rèn)值由系統(tǒng)指定
cursor, takefocus:默認(rèn)值為空字符串
bd:默認(rèn)值為1
borderwidth:默認(rèn)值為1
font:默認(rèn)值為'TkDefaultFont'
highlightthickness:默認(rèn)值為2
relief:默認(rèn)值為'flat'
# repeatdelay和repeatinterva對應(yīng)的是滾動槽按鈕
repeatdelay:默認(rèn)值為300
repeatinterval:默認(rèn)值為100
state:默認(rèn)值為'normal'
width:默認(rèn)值為15,注意這是滾動條的寬度(對于水平的是它的高度)
(6)、方法
1.coords(value=None)
以元組形式(x, y)返回滑塊中心相對于標(biāo)尺控件左上角的坐標(biāo)
value——滑塊在對應(yīng)刻度值時的中心坐標(biāo)。如果為空,則是當(dāng)前的刻度值
2.get()
返回滑塊的當(dāng)前刻度值,類型是int
3.set(value)
設(shè)置滑塊的當(dāng)前刻度值為value
4.identify(x, y)
返回位于滾動條控件像素坐標(biāo)x, y的組成名稱,無則返回空字符串。組成名稱包括'trough1', 'trough2', 'slider'
二十五、頂級窗口控件(Toplevel)
(1)、概念
頂級窗口控件是類似于Frame控件,但是在窗口管理器下獨(dú)立存在的窗口(窗口脫離根窗口獨(dú)立存在),屬于主窗口的子控件
對于任意控件w,使用w.winfo_toplevel()方法獲取控件的頂級窗口控件
# 實(shí)測頂級窗口會在創(chuàng)建后的主循環(huán)中自動放置
(2)、演示圖

(3)、構(gòu)造方法
tkinter.Toplevel(master=None, cnf={}, **kw)
(4)、屬性項(xiàng)
bd, borderwidth, class, menu, relief, screen, use, background, bg, colormap, container, cursor, height, highlightbackground, highlightcolor, highlightthickness, padx, pady, takefocus, visual, width
1.screen
指定放置頂級窗口控件的屏幕
# 這個屬性項(xiàng)不能使用configure或?qū)傩皂?xiàng)數(shù)據(jù)庫來改變
2.container
是一個布爾值,如果值為True,則這個控件可用作容器,其他應(yīng)用程序可使用use屬性項(xiàng)嵌入到其中,但其不能有任何自己的子控件
# 這個屬性項(xiàng)不能使用configure來改變
3.use
用于嵌入窗口,值是一個容器窗口的id(也就是窗口句柄)。如果容器窗口是Tk程序中的,則它應(yīng)是container值被指定為True的框架或頂層窗口控件
# 這個屬性項(xiàng)不能使用configure來改變
示例:
運(yùn)行結(jié)果:
運(yùn)行時:

?
等待三秒后:

?
(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)
background, bg, highlightbackground, highlightcolor:默認(rèn)值由系統(tǒng)指定
cursor:默認(rèn)值為空字符串
bd:默認(rèn)值為0
borderwidth:默認(rèn)值為0
relief:默認(rèn)值為'flat'
container:默認(rèn)值為0
height:默認(rèn)值為0
highlightthickness:默認(rèn)值為0
padx:默認(rèn)值為0
pady:默認(rèn)值為0
takefocus:默認(rèn)值為0
width:默認(rèn)值為0
# menu屬性在Menu控件中說明
(6)、方法
見章節(jié)“主窗口(Tk)與控件和窗口部分方法”中“部分方法”從wm_aspect()以后的方法
二十六、窗格控件(PanedWindow)
(1)、概念
窗格控件類似于特殊的Frame控件,但它允許用戶通過拖動窗格分割線(或窗格手柄)來調(diào)整窗格的大小
# 下文稱sash(窗扇)為“分割線”
(2)、演示圖

(3)、構(gòu)造方法
tkinter.PanedWindow(master=None, cnf={}, **kw)
(4)、屬性項(xiàng)
background, bd, bg, borderwidth, cursor, handlepad, handlesize, height, opaqueresize, orient, proxybackground, proxyborderwidth, proxyrelief, relief, sashcursor, sashpad, sashrelief, sashwidth, showhandle, width
1.orient
當(dāng)值為'horizontal'(默認(rèn)值)時水平方向布局控件,當(dāng)值為'vertical'時垂直方向布局控件。值可以是它們的縮寫
2.sashcursor
當(dāng)鼠標(biāo)移動到分割線上時的鼠標(biāo)樣式
如果為空(默認(rèn)值),則sb_h_double_arrow應(yīng)用于水平窗格,sb_v_double_arrow應(yīng)用于垂直窗格
3.sashwidth
分割線的寬度,默認(rèn)值為3
4.sashrelief
分割線的邊框樣式,默認(rèn)值為'flat'
5.sashpad
分割線的外邊距(分割線周圍的空白區(qū)域),默認(rèn)值為0
6.showhandle
是否顯示窗格手柄,默認(rèn)不顯示
7.handlesize
窗格手柄的邊長(手柄是正方形的),默認(rèn)值為8
8.handlepad
窗格手柄距離窗格控件頂端或左端(取決于orient)的距離,默認(rèn)值為8
9.opaqueresize
如果為True,則在窗格移動時調(diào)整其大小;如果為False,則在窗格移動松開鼠標(biāo)時調(diào)整其大小,這會顯示分割線的“幽靈”版本作為其代理,用于顯示松開鼠標(biāo)時調(diào)整的位置
10.proxybackground
繪制代理的背景色。如果是空字符串則使用background屬性的值
11.proxyborderwidth
代理的邊框?qū)挾?,默認(rèn)值為2
12.proxyrelief
代理的邊框樣式,默認(rèn)值為'flat'
(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)
background, bg:默認(rèn)值由系統(tǒng)指定
cursor, height, width:默認(rèn)值為空字符串
bd:默認(rèn)值為1
borderwidth:默認(rèn)值為1
relief:默認(rèn)值為'flat'
(6)、方法
# 下面稱使用add()方法添加到窗格控件內(nèi)的控件是窗格控件的“子控件”
1.add(child, **kw)
向窗格控件中添加一個子控件child,kw指定屬性項(xiàng)(見paneconfigure())
2.remove(child)
# 別名:forget
從窗格控件中刪除一個子控件child
3.paneconfigure(child, cnf=None, **kw)
# 別名:paneconfig
# 在方法定義處的child參數(shù)名稱是tagOrId,但應(yīng)該是命名錯誤
設(shè)置子控件child的屬性項(xiàng),有以下的屬性項(xiàng):
after, before:值必須是一個窗格控件的子控件,子控件child會在傳入值的子控件之前/之后進(jìn)行添加
width, height:子控件的寬度和高度
# 實(shí)測水平窗格控件的高度或垂直窗格控件的寬度取決于其子控件的最大高度或?qū)挾?/span>
padx, pady:子控件的水平外邊距和垂直外邊距
minsize:指定子控件的最小尺寸。對于水平窗格是寬度,對于垂直窗格是高度
# 指定后無論怎么拖動分割線,子控件尺寸不會小于該值。不建議同時指定width(水平窗格)
或height(垂直窗格)
hide:設(shè)置子控件是否可見
sticky:通過E, W, S, N組合的字符串來定位子控件在窗格的位置,空字符串為居中。默認(rèn)值為'nesw'(填滿窗格)
stretch:指定為窗格分配額外空間的方式。額外空間出現(xiàn)在設(shè)置width(水平窗格)或height(垂直窗格)的窗格控件中,例如當(dāng)添加的控件寬度或高度沒達(dá)到窗格控件的寬度或高度,當(dāng)使用remove()刪除窗格時。當(dāng)額外空間出現(xiàn)時,會被均分到可伸展的窗格。傳入以下的值:
????'always':該窗格始終可伸展
????'first':該窗格只當(dāng)是第一個窗格時才可伸展
????'last'(默認(rèn)值):該窗格只當(dāng)是最后一關(guān)窗格時才可伸展
????'middle':該窗格只當(dāng)不是第一個或最后一關(guān)窗格時才可伸展
????'never':該窗格始終不可伸展
4.panecget(child, option)
以字符串形式返回child對應(yīng)屬性項(xiàng)option的值
5.identify(x, y)
返回位于窗格控件像素坐標(biāo)x, y的索引和組成名稱組成的二元組,無則返回空字符串。索引代表第幾個分割線或手柄(從0開始),組成名稱包括'sash', 'handle'
6.panes()
返回子控件的有序元組
示例1:
運(yùn)行結(jié)果:
窗格控件1中的所有子控件 (<string object: '.!listbox'>, <string object: '.!panedwindow2'>)
窗格控件2中的所有子控件 (<string object: '.!text'>, <string object: '.!message'>)
運(yùn)行時:

拖動分割線(或窗格手柄):


示例2: ?# 演示stretch
運(yùn)行結(jié)果:
運(yùn)行時:

?
依次點(diǎn)擊三個按鈕:



# 當(dāng)窗格為可擴(kuò)展時,會均分額外空間
7.sash(*args)
查詢或改變分割線的位置。第一個參數(shù)指定模式(見下面的方法名),后面參數(shù)是對應(yīng)方法的參數(shù)
# 模式還有'dragto',參數(shù)是index, x, y,與其他控件的scan_dargto()方法類似
8.sash_coord(index)
返回分割線左上角的位置(x, y),index指定第幾個分割線(從0開始)
9.sash_mark(index)
與其他控件的scan_mark()方法類似。配合sash('drato')移動分割線
10.sash_place(index, x, y)
改變索引index對應(yīng)的分割線位置到x, y
11.proxy(*args)
查詢或改變代理的位置。第一個參數(shù)指定模式(見下面的方法名),后面參數(shù)是對應(yīng)方法的參數(shù)
12.proxy_coord()
返回代理左上角的位置(x, y)
13.proxy_forget()
刪除代理
14.proxy_place(x, y)
改變代理的位置到x, y
二十七、菜單控件(Menu)
(1)、概念
菜單控件以可視化的方式將一系列菜單項(xiàng)(menu entry)進(jìn)行分組,并在每個分組下又“隱藏”了許多其他的菜單項(xiàng)。當(dāng)打開菜單時,這些菜單項(xiàng)就會“顯式”的呈現(xiàn)出來,方便用戶進(jìn)行選擇
菜單控件可分為三種類型:menubar/topleve(菜單欄/主目錄菜單/窗口菜單)、pull-down(下拉式菜單)、pop-up/contextual(彈出式菜單/上下文菜單/快捷式菜單)
# 也可以分為兩種:菜單欄、彈出式菜單
Windows上的菜單控件支持分離式菜單(tear-off menu),分離式菜單的最上方會有一條虛線,用戶點(diǎn)擊虛線會出現(xiàn)一個新的、獨(dú)立的、包含菜單項(xiàng)的工具欄窗口
# 注意,以下外觀類及尺寸類選項(xiàng)對菜單欄類型的菜單控件無效
(2)、演示圖
?


(3)、構(gòu)造方法
tkinter.Menu(master=None, cnf={}, **kw)
(4)、屬性項(xiàng)
activebackground, activeborderwidth, activeforeground, background, bd, bg, borderwidth, cursor, disabledforeground, fg, font, foreground, postcommand, relief, selectcolor, takefocus, tearoff, tearoffcommand, title, type
1.activeborderwidth
實(shí)測是菜單項(xiàng)的邊框?qū)挾?/span>
# 對彈出式菜單和下拉式菜單都有效
2.postcommand
是一個函數(shù),在菜單被彈出時執(zhí)行
# 由于平臺限制,Windows一個菜單系統(tǒng)中的所有該屬性項(xiàng)的回調(diào)函數(shù)會在菜單系統(tǒng)的任意一個菜單彈出時一起觸發(fā)
# 菜單欄類型的菜單在菜單欄被按下時觸發(fā)該屬性項(xiàng)的回調(diào)函數(shù)(即使沒按到菜單項(xiàng))
3.tearoff
是否啟用分離式菜單
4.tearoffcommand
是一個接收兩個位置參數(shù)的函數(shù),在菜單被分離時調(diào)用,調(diào)用傳參菜單的控件名和分離窗口的控件名
5.title
設(shè)置分離窗口的顯示名
6.type
# 此屬性項(xiàng)由Tk庫內(nèi)部使用,這里不過多介紹
值可以是'menubar', 'tearoff'或'normal'
(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)
activebackground, activeforeground, background, bg, disabledforeground, fg, foreground:默認(rèn)值由系統(tǒng)指定
# active和disabled的針對的是菜單項(xiàng)的state屬性項(xiàng)
selectcolor:默認(rèn)值由系統(tǒng)指定。這是指定單選框或多選框菜單項(xiàng)的顏色
borderwidth, bd:默認(rèn)值為0。實(shí)測對分離式菜單有效
cursor:默認(rèn)值為'arrow'。只對分離式菜單有效
font:默認(rèn)值為'TkMenuFont'
relief:默認(rèn)值為'flat'。實(shí)測只對分離式菜單有效
takefocus:默認(rèn)值為0
(6)、索引
索引對應(yīng)一個菜單項(xiàng)
1.active
索引對應(yīng)活動的菜單項(xiàng)
2.end, last
索引對應(yīng)最后一個菜單項(xiàng)
3.none
索引不對應(yīng)任何菜單項(xiàng)。常與activate()方法一起使用
4.@y
y是數(shù)字,被視為菜單的Y坐標(biāo),索引對應(yīng)菜單Y坐標(biāo)的菜單項(xiàng)
5.數(shù)字
正向索引(從0開始)
6.字符串
索引對應(yīng)字符串匹配菜單項(xiàng)文本的菜單項(xiàng)
# 如果索引對應(yīng)多個菜單項(xiàng),則以靠前的優(yōu)先
(7)、添加菜單
1.菜單欄
將新創(chuàng)建的菜單控件傳入主控件的menu屬性項(xiàng)
2.下拉式菜單
將新創(chuàng)建的菜單控件傳入其他菜單控件分層菜單項(xiàng)的menu屬性項(xiàng)
3.彈出式菜單
將新創(chuàng)建的菜單控件綁定事件<Button-3>,觸發(fā)事件時在觸發(fā)事件處使用post()方法彈出菜單
# 代碼語句參考:root.bind('<Button-3>', lambda event: menu.post(event.x_root, event.y_root))
(8)、添加或插入菜單項(xiàng)和分割線
通過以下控件方法,可以添加菜單項(xiàng)或菜單分割線
菜單項(xiàng)有:命令菜單項(xiàng)、分層菜單項(xiàng)、多選框菜單項(xiàng)、單選框菜單項(xiàng)
1.add(itemType, cnf={}, **kw)
在菜單最后添加一個菜單項(xiàng)。第一個參數(shù)指定模式(見下面的方法名),后面參數(shù)是對應(yīng)方法的參數(shù)。在最后傳入鍵值對設(shè)置菜單項(xiàng)的屬性項(xiàng)
2.add_command(cnf={}, **kw)
添加命令菜單項(xiàng)。命令菜單項(xiàng)會在按下菜單項(xiàng)時執(zhí)行對應(yīng)函數(shù)
3.add_cascade(cnf={}, **kw)
添加分層菜單項(xiàng)。分層菜單項(xiàng)會在按下菜單項(xiàng)時顯示另一個菜單控件
4.add_checkbutton(cnf={}, **kw)
添加多選框菜單項(xiàng)
5.add_radiobutton(cnf={}, **kw)
添加單選框菜單項(xiàng)
6.add_separator(cnf={}, **kw)
添加菜單分割線
7.insert(index, itemType, cnf={}, **kw)
在菜單index索引處添加一個菜單項(xiàng)。第一個參數(shù)指定模式(見下面的方法名),后面參數(shù)是對應(yīng)方法的參數(shù)。在最后傳入鍵值對設(shè)置菜單項(xiàng)的屬性項(xiàng)
8.insert_command(index, cnf={}, **kw)
9.insert_cascade(index, cnf={}, **kw)
10.insert_checkbutton(index, cnf={}, **kw)
11.insert_radiobutton(index, cnf={}, **kw)
12.insert_separator(index, cnf={}, **kw)
參考add_*()中的對應(yīng)方法
示例: ?# 演示圖的代碼
當(dāng)修改pm的tearoff為True時的分離式菜單:


?
(9)、菜單項(xiàng)和分割線的屬性項(xiàng)
因?yàn)榇蠖鄶?shù)屬性項(xiàng)對分割線和分離式菜單都不適用,所有以下屬性項(xiàng)對分割線和分離式菜單適用的在后面提出。僅對某個或某些菜單項(xiàng)適用的屬性項(xiàng)在前面提出
1.state
指定菜單項(xiàng)的狀態(tài):'normal', 'active'或'disabled'
# 當(dāng)鼠標(biāo)移動到菜單項(xiàng)('normal'狀態(tài))上時,菜單項(xiàng)的狀態(tài)是'active'
2.background
菜單項(xiàng)的背景色
3.activebackground
菜單項(xiàng)活動狀態(tài)時的背景色
4.foreground
菜單項(xiàng)的前景色
5.activeforeground
菜單項(xiàng)活動狀態(tài)時的前景色
6.font
菜單項(xiàng)的字體
7.label
菜單項(xiàng)顯示的標(biāo)簽
8.accelerator
菜單項(xiàng)右側(cè)顯示快捷鍵的標(biāo)簽
# 這個屬性只是顯示作用,并不設(shè)置對應(yīng)快捷鍵。設(shè)置快捷鍵使用bind()實(shí)現(xiàn)
9.bitmap
菜單項(xiàng)顯示的位圖,會覆蓋label屬性
10.image
菜單項(xiàng)顯示的圖像,會覆蓋label和bitmap屬性
11.compound
當(dāng)文本和圖像同時顯示時,指定圖像位于文本的方位。值可以是'top', 'bottom', 'left', 'right', 'center', 'none'(或它們的縮寫)。默認(rèn)值為'none'
12.command
當(dāng)菜單項(xiàng)被按下時調(diào)用的函數(shù)
在Windows上對指定子菜單的分層菜單項(xiàng)無效
13.underline
指定菜單項(xiàng)標(biāo)簽中要下劃線的字符的數(shù)字索引
在按下Alt后會將菜單中被指定下劃線的字符添加下劃線,按下被添加下劃線的字符可以執(zhí)行對應(yīng)菜單項(xiàng)
示例:
在IDLE Shell 3.10.11中按下Alt鍵、F鍵、X鍵,退出程序:



14.columnbreak
當(dāng)值為0時(默認(rèn)值),該項(xiàng)顯示在前一項(xiàng)的下面;當(dāng)值為1時,該項(xiàng)顯示在菜單中新一列的頂部。對分割線和分離式菜單適用
# 該選項(xiàng)在Aqua/MacOS上被忽略
示例:在復(fù)制選項(xiàng)卡中指定該屬性項(xiàng)為1

15.hidemargin
是否將菜單選項(xiàng)左右空白邊距去除。對分割線和分離式菜單適用
# 必須一列菜單選項(xiàng)都設(shè)置該屬性為True才會去除
# 官方舉的例子是顏色調(diào)色板、圖案調(diào)色板等
示例:
左圖是設(shè)置為False,右圖是設(shè)置為True:
?


16.menu
僅適用于分層菜單項(xiàng)。指定該菜單項(xiàng)的子菜單
17.indicatoron
僅適用于多選框和單選框菜單項(xiàng)。是否顯示菜單項(xiàng)指示器
18.selectcolor
僅適用于多選框和單選框菜單項(xiàng)。菜單項(xiàng)指示器的顏色
19.selectimage
僅適用于多選框和單選框菜單項(xiàng)。菜單項(xiàng)被選中的圖像,只在設(shè)置image屬性之后才能生效
20.offvalue
21.onvalue
22.value
23.variable
offvalue, onvalue僅適用于多選框菜單選,value僅適用于單選框菜單項(xiàng),variable僅適用于多選框和單選框菜單項(xiàng)
見多選框控件章節(jié)和單選框控件章節(jié)相應(yīng)控件屬性
(10)、其他方法
1.index(index)
返回index對應(yīng)的數(shù)字索引
2.delete(index1, index2=None)
刪除閉區(qū)間[index1, index2]之間的所有菜單項(xiàng)。如果省略index2,則刪除index1的菜單項(xiàng)
該方法不會刪除分離式菜單的最上面的虛線菜單項(xiàng),刪除它應(yīng)改變tearoff屬性項(xiàng)
3.activate(index)
將index對應(yīng)菜單項(xiàng)的狀態(tài)變?yōu)閍ctive。如果index為'none'或指定的菜單項(xiàng)被禁用,則菜單控件中將沒有菜單項(xiàng)狀態(tài)為active
4.invoke(index)
如果菜單項(xiàng)狀態(tài)不是disabled且command已指定,則調(diào)用command并返回結(jié)果
5.post(x, y)
在桌面坐標(biāo)(x, y)位置彈出菜單
6.unpost()
取消彈出坐標(biāo)。該方法在Windows和Macintosh無效,因?yàn)檫@些平臺有自己取消彈出的方法
7.entryconfigure(index, cnf=None, **kw)
# 別名:entryconfig
設(shè)置index對應(yīng)菜單項(xiàng)的屬性項(xiàng)
8.entrycget(index, option)
以字符串形式返回index對應(yīng)菜單項(xiàng)的屬性項(xiàng)option的值
9.type(index)
返回index對應(yīng)菜單項(xiàng)的類型:'tearoff', 'command', 'cascade', 'separator', 'checkbutton', 'radiobutton'
10.xposition(index)
返回index對應(yīng)菜單項(xiàng)距離菜單控件左上角的像素坐標(biāo)x
# 這是彈出式菜單的坐標(biāo)
11.yposition(index)
返回index對應(yīng)菜單項(xiàng)距離菜單控件左上角的像素坐標(biāo)y
# 這是彈出式菜單的坐標(biāo)
12.tk_popup(x, y, entry='')
彈出菜單,entry指定的菜單項(xiàng)左上角的點(diǎn)被定位在桌面坐標(biāo)(x, y),空字符串代表菜單控件左上角被定位在桌面坐標(biāo)(x, y)
(11)、系統(tǒng)菜單
在Windows上,每個窗口左上角都會有一個系統(tǒng)菜單,它可以用快捷鍵Alt+空格呼出
?

如果有一個菜單控件是菜單欄菜單控件的子控件,且名為'system',則在菜單欄菜單控件添加分層菜單項(xiàng)指定menu為名為'system'的菜單控件,它的菜單項(xiàng)會附加到這個系統(tǒng)菜單上
# 字體、顏色、圖像、位圖等不會顯示在系統(tǒng)菜單中
示例:
運(yùn)行結(jié)果:


二十八、菜單按鈕控件(MenuButton)
(1)、概念
菜單按鈕控件是一個與菜單控件相關(guān)聯(lián)的按鈕
關(guān)聯(lián)具體過程是:新建一個菜單按鈕控件,再新建一個菜單控件,它被指定為菜單按鈕控件的子控件,再將菜單按鈕控件的menu屬性改為這個菜單控件
菜單按鈕控件默認(rèn)邊框樣式是'flat',在被按下時會變成'raised'
(2)、演示圖
?


(3)、構(gòu)造方法
tkinter.Menubutton(master=None, cnf={}, **kw)
(4)、屬性項(xiàng)
activebackground, activeforeground, anchor, background, bd, bg, bitmap, borderwidth, cursor, direction, disabledforeground, fg, font, foreground, height, highlightbackground, highlightcolor, highlightthickness, image, indicatoron, justify, menu, padx, pady, relief, compound, state, takefocus, text, textvariable, underline, width, wraplength
1.indicatoron
如果為True,則在菜單按鈕控件右邊顯示一個小型矩形指示器;如果是False(默認(rèn)值),則不顯示
2.direction
指定菜單彈出的位置,值可以是'above'(上), 'below'(下), 'left'(左), 'right'(右)
# 當(dāng)菜單在上和下彈出位置顯示在屏幕外,菜單彈出位置會上下顛倒
(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)
activebackground, activeforeground, background, bg, disabledforeground, fg, foreground, highlightbackground, highlightcolor:默認(rèn)值由系統(tǒng)指定
bitmap, cursor, image, menu, text, textvariable:默認(rèn)值為空字符串
anchor:默認(rèn)值為'center'
bd:默認(rèn)值為1
borderwidth:默認(rèn)值為1
font:默認(rèn)值為'TkDefaultFont'
height:默認(rèn)值為0
highlightthickness:默認(rèn)值為0
justify:默認(rèn)值為'center'
padx:默認(rèn)值為'4p'
pady:默認(rèn)值為'3p'
relief:默認(rèn)值為'flat'
compound:默認(rèn)值為'none'
state:默認(rèn)值為'normal'
takefocus:默認(rèn)值為0
underline:默認(rèn)值為-1。注意underline的作用是標(biāo)簽控件中的而不是菜單控件
width:默認(rèn)值為0
wraplength:默認(rèn)值為0
示例:
運(yùn)行結(jié)果:


?
二十九、選項(xiàng)菜單控件(OptionMenu)
(1)、概念
選項(xiàng)菜單控件繼承自MenuButton類,用戶在一個下拉菜單中選擇一項(xiàng)選項(xiàng)
(2)、演示圖


?
(3)、構(gòu)造方法
tkinter.OptionMenu(master, variable, value, *values, **kwargs)
master——指定父控件,必須指定
variable——綁定的控制變量
value, values——指定選項(xiàng)
kwargs——關(guān)鍵字只支持command,回調(diào)函數(shù)會傳參選定選項(xiàng)的值
(4)、屬性項(xiàng)固定值
borderwidth:固定值為2
textvariable:固定值為variable,構(gòu)造方法傳入的控制變量
indicatoron:固定值為1
relief:固定值為RAISED
anchor:固定值為"c",也就是'center'
highlightthickness:固定值為2
示例:
運(yùn)行結(jié)果:
運(yùn)行時:

分別選中A、選中B:


A 被選中
B 被選中
三十、圖像
(1)、圖像類
圖像類Image被位圖類BitmapImage和圖片類PhotoImage所繼承,位圖類和圖片類都有圖像類的方法
1.方法
1.1.configure(**kw)
# 別名:config
設(shè)置圖像的屬性項(xiàng),這里只能修改不能查詢
1.2.width()
返回圖像的寬度
1.3.height()
返回圖像的高度
1.4.type()
返回圖像的類型:'photo'或'bitmap'
補(bǔ)充:call()方法
主窗口控件和實(shí)例變量tk(_tkinter.Tkapp對象,Tkinter中類基本都含有)有一個call()方法,這個方法能夠在Tcl解釋器中執(zhí)行Tcl/Tk命令
后文會補(bǔ)充一些用Tcl/Tk命令執(zhí)行,但在Python模塊中沒有相應(yīng)函數(shù)/方法的
加粗字體代表字符串形式
1.5.Tcl/Tk命令:image inuse name
如果名為name的圖像被任何控件使用,則返回1,否則返回0
補(bǔ)充:tkinter模塊下的image_names()函數(shù)和image_types()函數(shù)
分別是返回存在的圖像名稱和有效的圖像類型
在image屬性項(xiàng)可以直接傳入圖像名稱來使用它
# 以下對Tk位圖的解釋含有個人理解,不保證完全權(quán)威、正確
(2)、位圖類
Tk中的位圖是單色位圖,Tk中位圖圖像由背景色、前景色和兩個位圖(源和掩碼)定義
1.構(gòu)造方法
tkinter.BitmapImage(name=None, cnf={}, master=None, **kw)
2.支持格式
XBM
補(bǔ)充:XBM ?# 摘抄自百度百科
X-Bitmap(XBM)是一種古老但通用的圖像文件格式,它與許多Web瀏覽器都兼容。X-Windows圖形界面(UNIX和Linux常用的GUI)的C代碼庫xlib中有一個組件專門描述了它的規(guī)范。XBM圖形的實(shí)質(zhì)上是使用16進(jìn)制數(shù)組來表示二進(jìn)制圖像的C源代碼文件
3.屬性項(xiàng)
3.1.background
指定圖像的背景色,一個像素掩碼位圖為1、源位圖為0時會顯示該背景色。如果值為空字符串(默認(rèn)值),則背景色為透明
3.2.foreground
指定圖像的前景色,一個像素掩碼位圖為1、源位圖為1時會顯示該前景色。默認(rèn)值'#000000'(黑色)
3.3.file
指定源位圖文件。文件必須遵守X11位圖格式
3.4.data
指定源位圖字符串,會覆蓋file屬性。字符串必須遵守X11位圖格式
3.5.maskfile
指定掩碼位圖文件。文件必須遵守X11位圖格式
3.6.maskdata
指定掩碼位圖字符串,會覆蓋file屬性。字符串必須遵守X11位圖格式
當(dāng)一個像素掩碼位圖為0時會顯示透明
示例:
運(yùn)行結(jié)果:
圖像是否被使用: 0
圖像是否被使用: 1
37
26
bitmap
存在的圖像名稱: ('::tk::icons::information', '::tk::icons::error', '::tk::icons::warning', 'mybitmap', '::tk::icons::question')
有效的圖像類型: ('photo', 'bitmap')
?

(3)、圖片類
1.構(gòu)造方法
tkinter.PhotoImage(name=None, cnf={}, master=None, **kw)
2.支持格式
GIF, PGM, PPM, PNG
3.屬性項(xiàng)
3.1.data
將圖像的數(shù)據(jù)內(nèi)容以字符串傳入。字符串可以是二進(jìn)制數(shù)據(jù)或base64編碼數(shù)據(jù)(支持PNG和GIF)。如果同時指定data和file,則優(yōu)先使用file
3.2.file
指定圖像的文件名
3.3.format
指定數(shù)據(jù)或文件的圖像格式對應(yīng)的處理程序。如果忽略則自動選擇
某些圖像格式支持子屬性項(xiàng),使用方法是在值后面空格加上“-屬性項(xiàng) 值”,子屬性項(xiàng)如下:
3.3.1.gif -index
指定圖片是gif圖片中第index個圖片,index從0開始
# 實(shí)測gif圖片其他幀圖片在程序中展示的不理想:
?

3.3.2.png -alpha
指定圖像的alpha值,值在0~1之間(透明~不透明)
示例:
alpha值分別指定1, 0.5, 0.25, 0:
?




設(shè)置控件背景色為綠色,圖像alpha值分別指定1, 0.5, 0.25, 0:
?




3.4.width
指定圖像的寬度,單位是像素。默認(rèn)值0代表值為圖像數(shù)據(jù)或文件寬度
3.5.height
指定圖像的高度,單位是像素。默認(rèn)值0代表值為圖像數(shù)據(jù)或文件高度
3.6.gamma
指定圖像的伽馬值(亮度)。值必須大于0才有效。默認(rèn)值為1(正常亮度)。一般大于1圖像會變亮、小于1圖片會變暗
示例:

分別指定伽馬值0.1, 0.001, 2, 20:
?




3.7.palette
指定RGB彩色立方體的分辨率
如果值是一個十進(jìn)制整數(shù),則代表單色(灰度),范圍2~256
如果值是用斜線(/)分隔的三根十進(jìn)制整數(shù),則代表使用紅色、綠色、藍(lán)色的色調(diào)數(shù)(color shades),范圍2~256
示例:
?

分別指定palette為2, 10, 2/2/2, 256/256/2
?




?
4.方法
4.1.blank()
將圖像設(shè)置為完全透明
4.2.configure(**kw)
# 別名:config
設(shè)置圖像的屬性項(xiàng)
4.3.cget(option)
以字符串形式返回圖像的屬性項(xiàng)option的值
4.4.get(x, y)
返回圖像中坐標(biāo)為(x, y)的像素的顏色,返回一個三元組:(R, G, B)
# 實(shí)測palette屬性不影響結(jié)果
4.5.width()
返回圖像的寬度
4.6.height()
返回圖像的高度
4.7.copy()
復(fù)制圖像,返回新的圖片對象
4.8.zoom(x, y='')
復(fù)制圖像,并在原圖像x方向縮放至原來的x倍,y方向縮放至原來的y倍(y沒指定則同x)。返回新的圖片對象
參數(shù)x, y必須是正整數(shù)
4.9.subsample(x, y='')
復(fù)制圖像,并在原圖像x方向縮放至原來的x分之一,y方向縮放至原來的y分之一(y沒指定則同x)。如果x/y為負(fù)數(shù),則圖像垂直/水平翻轉(zhuǎn)并縮放。返回新的圖片對象
參數(shù)x, y必須是整數(shù)
4.10.put(data, to=None)
設(shè)置圖像中從to位置開始的像素點(diǎn)顏色或to范圍內(nèi)像素點(diǎn)的顏色指定為數(shù)據(jù)data中的顏色
data——顏色數(shù)據(jù):
如果是單個顏色字符串,則將to位置顏色替換為該顏色
如果格式是(color, color, ...),則從to位置開始,從上到下替換顏色
如果格式是[(color, color, ..), (color, color, ...), ...],則從to位置開始,從上到下讀取列表中的每個元組,按元組中的元素從左到右替換顏色。元組中的元素必須個數(shù)相等
to——替換起始位置或范圍,默認(rèn)是(0, 0):
如果是(x),則起始位置是(x, x)
如果是(x, y),則起始位置是(x, y)
如果是(x1, y1, x2),則范圍是(x1, y1, x2, x2)
如果是(x1, y1, x2, y2),則范圍是(x1, y1, x2, y2)
當(dāng)to代表的是起始位置替換時,會從to位置開始在原圖像替換顏色,多出的顏色會繼續(xù)替換(不足的地方透明)
當(dāng)to代表的是范圍替換時,會從to范圍矩形的左上角開始替換顏色,不足的顏色會按已填充的顏色平鋪填充,多出的顏色忽略
示例:
程序同一目錄下的圖片blue.png(64x64):
?

程序:
運(yùn)行結(jié)果(圖片縮放兩倍):

4.11.write(filename, format=None, from_coords=None)
將圖像數(shù)據(jù)寫入名為filename的文件
format——指定圖像格式對應(yīng)的處理程序。如果忽略則自動選擇
from_coords——指定范圍:
如果忽略,則范圍是整個圖像
如果為(x, y),則范圍是(x, y)到圖像右下角的矩形區(qū)域
如果為(x1, y1, x2, y2),則范圍是(x1, y1)到(x2, y2)的矩形區(qū)域
4.12.transparency_get(x, y)
返回位于(x, y)的像素點(diǎn)是否為透明
4.13.transparency_set(x, y, boolean)
如果boolean為真,則將位于(x, y)的像素點(diǎn)設(shè)為透明,否則設(shè)為不透明
4.14.Tcl/Tk命令:圖片對象 data [option value(s)]
返回圖像數(shù)據(jù)。返回形式取決于-format屬性項(xiàng)
默認(rèn)返回形式是返回一個元組,元組內(nèi)每個元素代表一行顏色,顏色之間用空格分隔,顏色是'#XXXXXX'形式的
option value(s)——屬性項(xiàng),可選值如下:
-background?color:用于取代透明像素點(diǎn)的顏色,未指定則是該像素點(diǎn)原來顏色
-format format-name:指定圖像格式對應(yīng)的處理程序。如果忽略則自動選擇
-from x1 y1 x2 y2:指定范圍,見write()
-grayscale:如果指定該項(xiàng),則將數(shù)據(jù)轉(zhuǎn)為灰度
示例:
程序同一目錄下的圖片blue.png(64x64):

程序:
運(yùn)行結(jié)果(無縮放):
?

(4)、注意事項(xiàng)
如果圖像實(shí)例沒有(動態(tài))賦值給現(xiàn)有變量,圖像將不會顯示。另外注意函數(shù)中局部變量離開函數(shù)的生命周期后會被垃圾回收機(jī)制回收,所以建議動態(tài)賦值圖像實(shí)例或?qū)⑵浔4鏋槌A?/span>
三十一、對話框
(1)、消息對話框
1.概念
消息對話框(messagebox)主要起到信息提示、警告、說明、詢問等作用,它包含程序指定的圖標(biāo)、信息和一組按鈕
消息對話框彈出后,會等待用戶選擇其中的一個按鈕,然后返回所選按鈕的名稱
2.導(dǎo)入模塊
導(dǎo)入tkinter包下的messagebox模塊使用消息對話框:
import tkinter.messagebox [as 別名]
from tkinter import messagebox
from tkinter.messagebox import *
3.函數(shù)
下列參數(shù)適用于messagebox模塊中的所有函數(shù)(非下劃線開頭):
title——是一個字符串,作為消息對話框的標(biāo)題,默認(rèn)為空字符串
message——是一個字符串,指定在消息對話框中顯示的消息,默認(rèn)為空字符串
options——屬性項(xiàng)
3.1.showinfo(title=None, message=None, **options)
返回值'ok'(包括右上角關(guān)閉按鈕)
?

# 演示圖的標(biāo)題和顯示信息是自己添加的
3.2.showwarning(title=None, message=None, **options)
返回值'ok'(包括右上角關(guān)閉按鈕)
?

3.3.showerror(title=None, message=None, **options)
返回值'ok'(包括右上角關(guān)閉按鈕)
?

3.4.askquestion(title=None, message=None, **options)
返回值'yes'或'no'

3.5.askokcancel(title=None, message=None, **options)
返回值True或False,右上角關(guān)閉按鈕返回False

3.6.askretrycancel(title=None, message=None, **options)
返回值True或False,右上角關(guān)閉按鈕返回False

3.7.askyesno(title=None, message=None, **options)
返回值True或False

3.8.askyesnocancel(title=None, message=None, **options)
返回值True, False或None,右上角關(guān)閉按鈕返回None

4.類
Message(master=None, **options)
創(chuàng)建一個默認(rèn)信息對話框?qū)ο?/span>
master——指定父控件。沒有指定則是options中的parent屬性
options——屬性項(xiàng)
4.1.show(**options)
使用對象的show()方法彈出對話框,用戶選定按鈕后返回選定值
options——屬性項(xiàng)
5.屬性項(xiàng)
messagebox模塊中函數(shù)或類的屬性項(xiàng):
5.1.title
指定消息對話框的標(biāo)題
5.2.message
指定在消息對話框中顯示的消息
5.3.icon
指定顯示的圖標(biāo),值是'error'(錯誤), 'info'(信息,默認(rèn)值), 'question'(問題/詢問)或'warning'(警告)
5.4.type
指定顯示的一組預(yù)定義按鈕,可選值如下:
'abortretryignore':中止/重試/忽略按鈕(abort/retry/ignore)
'ok':確定按鈕(ok)
'okcancel':確定/取消按鈕(ok/cancel)
'retrycancel':重試/取消按鈕(retry/cancel)
'yesno':是/否按鈕(yes/no)
'yesnocancel':是/否/取消按鈕(yes/no/cancel)
# messagebox模塊內(nèi)函數(shù)都指定了icon和type,并且有的函數(shù)對返回值有相應(yīng)的處理
5.5.parent
指定父控件。父控件所在窗口在沒有關(guān)閉對話框的情況下會處于阻塞禁用狀態(tài)
5.6.detail
指定顯示在message信息下的輔助信息
5.7.default
指定默認(rèn)按鈕。默認(rèn)按鈕在彈出對話框時有藍(lán)色邊框并且按下回車可以激活
默認(rèn)按鈕必須是type中出現(xiàn)的名稱
6.常量
messagebox模塊中定義了如下的常量,值是常量名對應(yīng)的字符串
圖標(biāo):
ERROR, INFO, QUESTION, WARNING
預(yù)定義按鈕:
ABORTRETRYIGNORE, OK, OKCANCEL, RETRYCANCEL, YESNO, YESNOCANCEL
返回值:
ABORT, RETRY, IGNORE, OK, CANCEL, YES, NO
# 因?yàn)閙essagebox模塊中定義了__all__,所以常量和類不能用from ... import *方法導(dǎo)入
示例:
運(yùn)行結(jié)果:
運(yùn)行后在文本框輸入一些文字:
?

點(diǎn)擊按鈕后彈出信息對話框,兩次都按“是”:
?


# 第二次按“是”后,會使用默認(rèn)打開程序打開text.txt文件
(2)、文件選擇對話框
1.概念
文件選擇對話框(filedailog)用于在本地選擇文件或者保存文件
2.導(dǎo)入模塊
導(dǎo)入tkinter包下的filedialog模塊使用文件選擇對話框:
import tkinter.filedialog [as 別名]
from tkinter import filedialog
from tkinter.filedialog import *
補(bǔ)充:模態(tài)對話框與非模態(tài)對話框
# 摘抄自百度百科
當(dāng)用戶打開模態(tài)對話框(Modal Dialogue Box,又叫做模式對話框)時,用戶想要對對話框以外的應(yīng)用程序進(jìn)行操作時,必須首先對該對話框進(jìn)行響應(yīng)
而當(dāng)用戶打開非模態(tài)對話框(Nonmodal Dialogue Box,又叫做無模式對話框)時,依然可以操作其他窗口
3.函數(shù)
以下函數(shù)的**options參數(shù)都是屬性項(xiàng),且都會創(chuàng)建一個模態(tài)的、原生外觀的對話框,等待用戶選取,再將選中值或None返回
3.1.askopenfile(mode='r', **options)
3.2.askopenfiles(mode='r', **options)
3.3.askopenfilename(**options)
3.4.askopenfilenames(**options)
四個函數(shù)都創(chuàng)建Open對話框(打開對話框)
區(qū)別:
askopenfile()只能打開一個文件,返回模式為mode的文件對象,取消時返回None
askopenfiles()能打開多個文件,返回模式為mode的文件對象組成的列表,取消時返回''
askopenfilename()只能打開一個文件,返回文件名的絕對路徑,取消時返回''
askopenfilenames()能打開多個文件,返回文件名的絕對路徑組成的元組取消時返回''
3.5.asksaveasfile(mode='w', **options)
3.6.asksaveasfilename(**options)
兩個函數(shù)都創(chuàng)建SaveAs對話框(另存為對話框)
區(qū)別:
asksaveasfile()選擇另存為的文件,返回模式為mode的文件對象,取消時返回None
asksaveasfilename()選擇另存為的文件,返回文件名的絕對路徑,取消時返回''
# asksaveasfile()會創(chuàng)建文件而asksaveasfilename()不會
# SaveAs對話框和Open對話框的區(qū)別是SaveAs對話框可選擇不存在的文件
3.7.askdirectory(**options)
創(chuàng)建選擇目錄(文件夾)對話框,返回目錄的絕對路徑,取消時返回''
4.屬性項(xiàng)
4.1.parent
指定父控件。父控件所在窗口在沒有關(guān)閉對話框的情況下會處于阻塞禁用狀態(tài)
4.2.title
指定文件對話框的標(biāo)題
4.3.initialdir
打開對話框時位于的目錄
4.4.mustexist
用戶是否只能選擇現(xiàn)已存在的目錄
# 實(shí)測無效,可能是操作系統(tǒng)的原因
# 以下屬性項(xiàng)對于目錄對話框不適用
4.5.initialfile
打開對話框時選中的文件
4.6.filetypes
指定篩選文件類型的下拉菜單選項(xiàng)。對于目錄對話框不適用
值的格式是:
[(文件類型描述, 匹配模式), (文件類型描述, 匹配模式), ...]
# 列表與元組可以替換為序列
文件類型描述:是一個字符串,用來描述文件類型
匹配模式:
是一個字符串,會在字符串前自動加通配符'*'。在字符中沒有'.'時匹配后綴;在字符串又'.'時,'.'前匹配文件名,'.'后匹配后綴。匹配可以使用通配符'*'。值為'*'即匹配所有文件,值為''即匹配無后綴的文件
或是一個序列,其中每個元素是上述的字符串,可以匹配多項(xiàng)
4.7.typevariable
打開對話框時默認(rèn)的篩選文件類型的下拉菜單選項(xiàng)
值是一個控制變量,控制變量的值是filetypes中的文件類型描述,作為默認(rèn)選項(xiàng)
在對話框確認(rèn)時修改這個控制變量的值為確認(rèn)時文件類型描述的字符串
4.8.efaultextension
在另存為對話框用戶沒有指定文件后綴時附加到文件的后綴
值是字符串,代表文件后綴(可以不加前面的'.')
4.9.multiple
僅適用于打開對話框。如果為True則允許多選
4.10.confirmoverwrite
僅適用于另存為對話框。如果為True(默認(rèn)值),則在覆蓋文件時彈出確認(rèn)對話框,否則不會彈出
5.類
5.1.Open(master=None, **options)
5.2.SaveAs(master=None, **options)
5.3.Directory(master=None, **options)
創(chuàng)建一個打開/另存為/目錄對話框?qū)ο?,這個對象的對話框是系統(tǒng)原生外觀的
master——指定父控件
options——屬性項(xiàng)
5.3.1.show(**options)
使用對象的show()方法彈出對話框,用戶確定文件后返回文件或目錄的絕對路徑,取消時返回''
options——屬性項(xiàng)
示例:
運(yùn)行時:
?

點(diǎn)擊選擇圖片,并選擇圖片:
?

另存為圖片:
?

?
# 要想把后綴的PNG變?yōu)樾?,將代碼中f'.{cit_val}'改為f'.{cit_val.lower()}'
# 下面的類只是粗略介紹,具體見:
https://docs.python.org/zh-cn/3.10/library/dialog.htm
5.4.FileDialog(master, title=None)
創(chuàng)建一個簡單的文件選擇對話框?qū)ο?/span>
# 這個文件對話框不是系統(tǒng)原生外觀而是Tk的外觀,外觀如下:

5.5.LoadFileDialog(master, title=None)
5.6.SaveFileDialog(master, title=None)
都是FileDialog的子類,分別創(chuàng)建用于選取已有文件的對話框?qū)ο蠛蛣?chuàng)建用于選擇目標(biāo)文件的對話框?qū)ο?/span>
(3)、顏色選擇對話框
1.概念
顏色選擇對話框(colorchooser)用于用戶選擇顏色
2.導(dǎo)入模塊
導(dǎo)入tkinter包下的colorchooser模塊使用顏色選擇對話框:
import tkinter.colorchooser [as 別名]
from tkinter import colorchooser
from tkinter.colorchooser import *
3.函數(shù)
3.1.askcolor(color=None, **options)
創(chuàng)建一個顏色選擇對話框。調(diào)用后彈出對話框,等待用戶選擇顏色,再將選擇的顏色返回
color——同屬性項(xiàng)initialcolor。如果同時指定則覆蓋initialcolor
options——屬性項(xiàng)如下:
initialcolor:默認(rèn)顯示的顏色。默認(rèn)值是'#a0a0a0'(淺灰色)
title:顏色選擇對話框的標(biāo)題,默認(rèn)為'顏色'
parent:指定父控件。父控件所在窗口在沒有關(guān)閉對話框的情況下會處于阻塞禁用狀態(tài)
返回值是一個二元組(選取顏色的RGB元組, 選取顏色的十六進(jìn)制形式)。如果取消選擇,則返回值是(None, None)
4.類
Chooser(master=None, **options)
創(chuàng)建一個顏色選擇對話框?qū)ο?/span>
master——指定父控件。沒有指定則是options中的parent屬性
options——屬性項(xiàng)
4.1.show(**options)
使用對象的show()方法彈出對話框,用戶選定按鈕后返回上述的二元組
options——屬性項(xiàng)
示例:
運(yùn)行結(jié)果:
運(yùn)行時:
?

點(diǎn)擊“選擇顏色”按鈕,選擇顏色為藍(lán)色:
# 點(diǎn)擊后默認(rèn)顯示顏色是綠色
?


(4)、字體選擇對話框
1.概念
字體選擇對話框(fontchooser)用于用戶選擇字體
2.Tcl/Tk命令
tkinter包中還沒有字體選擇對話框的相關(guān)模塊,只能使用call()方法調(diào)用Tcl解釋器
2.1.tk fontchooser show
顯示字體選擇對話框,在Windows上是模態(tài)的、原生外觀的對話框,在對話框撤回后返回(返回空字符串,要獲取字體信息見command屬性項(xiàng))
2.2.tk fontchooser hide
隱藏字體選擇對話框(如果可見)
2.3.tk fontchooser configure [-option [value]] [-option [value]], ...
設(shè)置字體選擇對話框的屬性項(xiàng)
-option value——屬性項(xiàng),可選值如下:
-parent:指定/返回父控件
-title:指定/返回對話框的標(biāo)題
-font:指定對話框中默認(rèn)顯示的字體 ?# 實(shí)測在Windows 7中-font不能獲取值
-command:值是一個使用register()方法進(jìn)行注冊的回調(diào)函數(shù)。在字體選擇對話框中的“應(yīng)用”和“確定”按鈕被按下時調(diào)用,傳入一個位置參數(shù),代表用戶選擇的字體
# font值的格式和command回調(diào)值的格式參見其他控件中字體設(shè)置使用字符串設(shè)置的方式
-visible:只讀屬性項(xiàng),返回布爾值,代表字體選擇對話框當(dāng)前是否可見
示例:
運(yùn)行結(jié)果:
運(yùn)行時:
?

輸入'ABCD一二三四'后點(diǎn)擊按鈕,選擇黑體、粗體、14號、下劃線:
?

# “應(yīng)用”按鈕只有設(shè)置command屬性才會出現(xiàn)
點(diǎn)擊“應(yīng)用”按鈕或“確定”按鈕:
?

補(bǔ)充:tkinter.simpledialog模塊
tkinter.simpledialog模塊包含一些便捷類和函數(shù),用于創(chuàng)建簡單的模態(tài)對話框(Tk外觀),從用戶那讀取一個值
函數(shù)如下:
askfloat(title, prompt, **kw)
askinteger(title, prompt, **kw)
askstring(title, prompt, **kw)
三個函數(shù)都是提供給用戶輸入浮點(diǎn)數(shù)/整數(shù)/字符串類型的對話框,用戶輸入后點(diǎn)“OK”按鈕返回用戶輸入的值
title參數(shù)指定對話框的標(biāo)題、prompt指定在對話框中顯示的信息
kw指定其他項(xiàng),這些項(xiàng)用關(guān)鍵字傳參:
initialvalue(初始值)、minvalue(最小值)、maxvalue(最大值)、parent(父控件)
askstring()函數(shù)還有額外的項(xiàng)show,它指定文本框內(nèi)容以何種樣式的字符顯示
# 字符串大小比較同Python比較字符串
類如下:
1.Dialog(parent, title)
自定義對話框的基類,parent指定父控件,title指定對話框的標(biāo)題
在創(chuàng)建實(shí)例后,會創(chuàng)建對話框并顯示(顯示時會阻塞調(diào)用處),對話框銷毀后通過實(shí)例的result屬性獲取結(jié)果
實(shí)例方法如下:
1.1.destroy(self)
銷毀對話框
1.2.body(self, master)
創(chuàng)建對話框主體,被構(gòu)造方法調(diào)用。該方法應(yīng)被重寫,重寫應(yīng)在方法內(nèi)創(chuàng)建控件并通過布局管理器包裝到master(master是一個框架控件)中,返回值代表有初始焦點(diǎn)的控件
1.3.buttonbox(self)
添加底部按鈕,被構(gòu)造方法調(diào)用。如果不想要它提供的按鈕則重寫,重寫將self作為主控件,并向其中添加控件。確定和取消按鈕事件可綁定下面的方法
1.4.ok(self, event=None)
1.5.cancel(self, event=None)
點(diǎn)擊確定和取消按鈕事件處理方法。重寫它們可自定義處理
1.6.validate(self)
在默認(rèn)ok()方法調(diào)用時的驗(yàn)證數(shù)據(jù)的方法,返回布爾值代表驗(yàn)證是否通過(默認(rèn)總是通過)。重寫它可自定義驗(yàn)證數(shù)據(jù)
1.7.apply(self)
在默認(rèn)ok()方法調(diào)用完驗(yàn)證方法后的處理數(shù)據(jù)的方法,沒有返回值。它處于ok()方法try...finally...結(jié)構(gòu)中,重寫它可自定義處理數(shù)據(jù)
?
2.SimpleDialog(master, text='', buttons=[], default=None, cancel=None, title=None, class_=None)
一個簡單但靈活的模態(tài)對話框。創(chuàng)建實(shí)例后應(yīng)使用go()方法顯示模態(tài)對話框
master——指定父控件
text——在對話框中顯示的信息,
buttons——指定顯示在底部的按鈕,點(diǎn)擊后go()方法返回點(diǎn)擊按鈕的正向索引
default——用戶在對話框中點(diǎn)擊Enter鍵后go()方法返回的值
cancel——用戶在點(diǎn)擊右上角關(guān)閉按鈕后go()方法返回的值
# 如果cancel參數(shù)未給出,則右上角關(guān)閉按鈕無效
title——對話框的標(biāo)題
class_——傳入對話框創(chuàng)建控件Toplevel中的class_值
實(shí)例方法如下:
2.1.go(self)
將對話框設(shè)為模態(tài),并阻塞。當(dāng)對話框消耗后返回實(shí)例的num屬性值
2.2.return_event(self, event)
默認(rèn)回車鍵事件的處理方法,可以重寫它來自定義
2.3.wm_delete_window(self)
默認(rèn)右上角關(guān)閉按鈕事件的處理方法,可以重寫它來自定義
2.4.done(self, num)
代表用戶操作對話框完畢,默認(rèn)處理是將實(shí)例屬性值num設(shè)為參數(shù)num的值,再退出對話框??梢灾貙懰鼇碜远x
三十二、Tcl/Tk命令:tk busy
參考:
https://tcl.tk/man/tcl8.6/TkCmd/busy.htm
https://blog.csdn.net/qq_48979387/article/details/119695934
(1)、概念
tk busy命令提供簡單方法來阻止來自控件的鼠標(biāo)事件。使用該命令可以讓控件變?yōu)槊β禒顟B(tài),處于忙碌狀態(tài)的控件及其子控件將忽略來自用戶的鼠標(biāo)事件(例如點(diǎn)擊),并且當(dāng)鼠標(biāo)指針在上面時會使用可配置的特殊光標(biāo)替換原來指針
# 注意這個命令不能阻止來自控件的鍵盤事件(例如Tab鍵)
(2)、命令
1.tk busy hold window [option value, ...]
使控件window及其子控件變?yōu)槊β禒顟B(tài)
option value——屬性項(xiàng),可選值只有-cursor,指定控件忙碌狀態(tài)顯示的光標(biāo),在Windows上的默認(rèn)值是wait,其他平臺是watch
2.tk busy window [option value, ...]
tk busy hold命令的快捷命令
3.tk busy configure window?[option value, ...]
設(shè)置忙碌狀態(tài)控件window的屬性項(xiàng)
4.tk busy cget window option
以字符串形式返回控件window的屬性option的值
5.tk busy forget?window [window] ...
取消(多個)控件window的忙碌狀態(tài)
6.tk busy current?[pattern]
返回當(dāng)前所有處于忙碌狀態(tài)的控件路徑名
pattern——如果指定,則只返回匹配pattern的路徑名
# 個人實(shí)測pattern似乎是正則表達(dá)式
7.tk busy status window
如果控件window處于忙碌狀態(tài),則返回1,否則返回0
補(bǔ)充:防止忙碌狀態(tài)控件獲得鍵盤焦點(diǎn)從而操作
可以將焦點(diǎn)移動到另一個控件,并確保焦點(diǎn)不能返回到忙碌狀態(tài)的控件
或者將忙碌控件的takefocus屬性設(shè)置為False
示例:
運(yùn)行結(jié)果:
運(yùn)行時:
?



按下按鈕1時:
?


按下按鈕2時:

