最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Python Tk GUI系列筆記(tkinter篇(初)) 第一章~第十章

2023-07-22 12:27 作者:水母山楂  | 我要投稿

〇、前言

此系列筆記主要介紹tkinter模塊——Tk圖形用戶界面(GUI)及其相關(guān)內(nèi)容

# 準(zhǔn)確來(lái)說(shuō)tkinter在Python中是一個(gè)包

編輯時(shí)內(nèi)容包括:

tkinter、tkinter包內(nèi)的部分模塊、tkinter.ttk模塊、ttkbootstrap、pystray模塊和PIL庫(kù)中的

ImageTk模塊

內(nèi)容參考以下網(wǎng)站:

TkDocs:https://tkdocs.com/(前四十一章)

C語(yǔ)言中文網(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章)

其他參考會(huì)在章節(jié)前列出

操作系統(tǒng)Windows 7

Python版本在二十三章前使用3.8版本,在二十三章及以后章節(jié)使用3.10版本

運(yùn)行結(jié)果的窗口圖片會(huì)縮放到80%,96 dpi

# gif錄制軟件:ScreenToGif

# 此系列的WPS筆記會(huì)在本系列的最后一個(gè)專欄中給出

顏色代表含義:

淡灰色:注釋,一般前面有#

綠色:示例

橙色:拓展

紫色:示例中的input用戶輸入內(nèi)容

紅色、藍(lán)色:突出或裝飾文字作用

部分內(nèi)容可能不嚴(yán)謹(jǐn)或者錯(cuò)誤,歡迎指出

# 如果Python無(wú)tkinter可參考這篇專欄cv14759634

一、概述

# 以下內(nèi)容摘抄自C語(yǔ)言中文網(wǎng)

·?Tkinter(即tk interface)是Python標(biāo)準(zhǔn)GUI庫(kù),簡(jiǎn)稱“Tk”;從本質(zhì)上來(lái)說(shuō),它是對(duì)TCL/TK工具包的一種Python接口封裝。Tkinter是Python自帶的標(biāo)準(zhǔn)庫(kù),因此無(wú)須另行安裝,它支持跨平臺(tái)運(yùn)行,不僅可以在Windows平臺(tái)上運(yùn)行,還支持在Linux和Mac平臺(tái)上運(yùn)行。

·?Tkinter編寫的程序,也稱為GUI程序,GUI(Graphical User Interface)指的是“圖形用戶界面”,它是計(jì)算機(jī)圖形學(xué)(CG)的一門分支,主要研究如何在計(jì)算機(jī)中表示圖形,以及利用計(jì)算機(jī)進(jìn)行圖形的計(jì)算、處理和顯示等相關(guān)工作

·?一個(gè)GUI程序一般由窗口、下拉菜單或者對(duì)話框等圖形化組件構(gòu)成,通過(guò)鼠標(biāo)點(diǎn)擊菜單欄、按鈕或者彈出對(duì)話框的形式來(lái)實(shí)現(xiàn)人機(jī)互動(dòng),從而提升人機(jī)交互的體驗(yàn),讓“冰冷”的程序變得有“溫度”


二、第一個(gè)Tkinter程序

一個(gè)Tkinter程序至少應(yīng)包含以下四個(gè)部分:

(1)、導(dǎo)入tkinter模塊

使用import語(yǔ)句或from...import...語(yǔ)句:

import tkinter [as 別名]

from tkinter import *

from tkinter import XXX

(2)、創(chuàng)建主窗口

主窗口也稱root窗口(即根窗口):

創(chuàng)建tk模塊中TK類的實(shí)例:tkinter.TK()

(3)、添加人機(jī)交互控件,同時(shí)編寫相應(yīng)的事件函數(shù)

這部分屬于Tkinter編程的重點(diǎn),人機(jī)交互控件例如菜單欄、按鈕或者彈出對(duì)話框等等

(4)、通過(guò)主循環(huán)來(lái)顯示主窗口

告訴Tkinter進(jìn)入主循環(huán),這是所有東西出現(xiàn)在屏幕上并允許用戶與之互動(dòng)的必要條件:

root.mainloop() ?# root是TK類的實(shí)例

# 主循環(huán)也稱“消息循環(huán)”或“事件循環(huán)”

示例1: ?# 沒(méi)有任何交互控件的Tkinter程序

運(yùn)行結(jié)果:

?


示例2: ?# 有文本和按鈕交互控件的Tkinter程序

運(yùn)行結(jié)果:

?


補(bǔ)充:寬度和高度對(duì)于大多數(shù)部件都是以像素為單位,而對(duì)于文本的部件是以字符為單位

補(bǔ)充:pythonw.exe(讓程序獨(dú)立運(yùn)行在Windows環(huán)境下)

Python的安裝目錄里有python.exe和pythonw.exe兩個(gè)程序:

python.exe運(yùn)行程序時(shí)會(huì)彈出CMD窗口

pythonw.exe運(yùn)行程序時(shí)無(wú)窗口,代碼在后臺(tái)執(zhí)行

可以使用pythonw.exe運(yùn)行程序使程序獨(dú)立運(yùn)行在Windows環(huán)境下而不受Python解釋器的影響(這里的不受影響是指不像python.exe運(yùn)行的那樣解釋器關(guān)閉GUI程序也關(guān)閉)

擴(kuò)展名為.py的文件默認(rèn)使用python.exe運(yùn)行,擴(kuò)展名為.pyw文件默認(rèn)使用pythonw.exe運(yùn)行


三、重要的Tk概念

(1)、控件/部件/組件(widget)

Tkinter用戶界面是由一個(gè)個(gè)控件組成的。每個(gè)控件都由相應(yīng)的Python對(duì)象表示,由ttk.Frame,ttk.Label以及ttk.Button這樣的類來(lái)實(shí)例化

# ttk是tkinter中的一個(gè)模塊,實(shí)現(xiàn)Tk風(fēng)格的控件

(2)、控件層級(jí)結(jié)構(gòu)(widget hierarchy)

控件按層級(jí)結(jié)構(gòu)來(lái)組織。標(biāo)簽和按鈕包含在框架中,框架又包含在根窗口中。當(dāng)創(chuàng)建每個(gè)子控件時(shí),它的父控件會(huì)作為控件構(gòu)造器的第一個(gè)參數(shù)被傳入

(3)、配置選項(xiàng)/控件屬性/屬性項(xiàng)(configuration options)

控件具有屬性,屬性會(huì)改變控件的外觀和行為。不同的控件類會(huì)具有不同的屬性集

(4)、幾何管理/布局管理(geometry management)

小部件在創(chuàng)建時(shí)不會(huì)自動(dòng)添加到用戶界面。通過(guò)幾何管理器控制這些小部件在用戶界面的位置

(5)、事件循環(huán)/主循環(huán)/消息循環(huán)(event loop)

只有主動(dòng)運(yùn)行一個(gè)事件循環(huán),Tkinter才會(huì)對(duì)用戶的輸入做出反應(yīng),改變你的程序,以及刷新顯示。如果你的程序沒(méi)有運(yùn)行事件循環(huán),你的用戶界面不會(huì)更新

# 這些概念的譯名后文會(huì)分別使用:控件、控件層級(jí)結(jié)構(gòu)、控件屬性/屬性/屬性項(xiàng)、布局管理、事件循環(huán)/主循環(huán)

# 在后面章節(jié)很少用到widget hierarchy這個(gè)概念

# configuration options一開是使用的Python官方文檔譯名:配置選項(xiàng)/選項(xiàng),但因?yàn)榫W(wǎng)上和GUI編程中以控件屬性作為譯名,所以此后面章節(jié)以控件屬性/屬性/屬性項(xiàng)作為譯名


四、控件屬性的獲取和設(shè)置

(1)、configure(cnf=None, **kw)/config(cnf=None, **kw)

這是控件的兩個(gè)方法,它們是完全等價(jià)的,功能如下:

設(shè)置控件的屬性,屬性的值通過(guò)關(guān)鍵字傳參

如果不帶參數(shù)調(diào)用方法,返回值是一個(gè)字典,鍵是字符串格式的控件允許的屬性名。對(duì)于屬性簡(jiǎn)寫鍵(例如bg,是'background'的簡(jiǎn)寫)的值是一個(gè)二元組:(屬性簡(jiǎn)寫, -屬性全稱);對(duì)于屬性全稱鍵的值是一個(gè)五元組,各索引含義如下:

0:屬性名稱

1:數(shù)據(jù)庫(kù)查找的屬性名稱

2:數(shù)據(jù)庫(kù)查找的屬性類

3:默認(rèn)值

4:當(dāng)前值

cnf——configuration的縮寫,是將控件屬性名稱映射到值的字典,這將設(shè)置對(duì)應(yīng)屬性的當(dāng)前值;或是一個(gè)字符串,這類似于將字符串作為鍵獲取字典的值,但是對(duì)于屬性簡(jiǎn)稱鍵會(huì)獲取屬性全稱鍵的值

示例:

運(yùn)行結(jié)果:

('bg', '-background')

('background', 'background', 'Background', <string object: 'SystemButtonFace'>, 'SystemButtonFace')

('background', 'background', 'Background', 'SystemButtonFace', 'SystemButtonFace')

['bd', 'borderwidth', 'class', 'menu', 'relief', 'screen', 'use', 'background', 'bg', 'colormap', 'container', 'cursor', 'height', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'padx', 'pady', 'takefocus', 'visual', 'width']

?


(2)、keys()

控件的一個(gè)方法,功能如下:

返回控件所有屬性名稱的列表

# 找出控件特有屬性時(shí)可將屬性列表與更簡(jiǎn)單的控件(如框架Frame)的列表進(jìn)行比較

# 同樣找出控件特有方法可使用dir()作比較

示例:

運(yùn)行結(jié)果:

['bd', 'borderwidth', 'class', 'menu', 'relief', 'screen', 'use', 'background', 'bg', 'colormap', 'container', 'cursor', 'height', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'padx', 'pady', 'takefocus', 'visual', 'width']

{'use', 'menu', 'screen'}

66

(3)、設(shè)置控件的屬性

1.在對(duì)象創(chuàng)建時(shí),使用關(guān)鍵字

自定義變量 = 控件類(控件屬性=值, 控件屬性=值, ...)

2.在對(duì)象創(chuàng)建后,將參數(shù)名用作字典索引

自定義變量[控件屬性] = 值

3.利用configure()或config()方法修改對(duì)象的多個(gè)屬性

自定義變量.configure(控件屬性=值, 控件屬性=值, ...)

(4)、關(guān)于后文對(duì)控件屬性的介紹

文檔內(nèi)的介紹控件的屬性時(shí),因?yàn)榭丶扔邢嗤膶傩裕üδ芙苹蛳嗤?,也有不同的。所以介紹時(shí)會(huì)在每章節(jié)的屬性項(xiàng)小節(jié)開頭列出所有的控件屬性,所有的控件屬性整個(gè)文檔都只會(huì)介紹一遍,除非有區(qū)別

同一控件列出的默認(rèn)值都是對(duì)于控件自身來(lái)說(shuō)的,其他控件的默認(rèn)值會(huì)有不同,所以介紹過(guò)的控件屬性會(huì)在小節(jié)最后列出默認(rèn)值和注意事項(xiàng)(在后面章節(jié)沒(méi)介紹的也會(huì)列出)

# 在介紹時(shí)沒(méi)列出默認(rèn)值的一般是無(wú)默認(rèn)值

控件中沒(méi)有列出的屬性,對(duì)當(dāng)前控件無(wú)效果或不常用

# 這里的“沒(méi)有列出的屬性”指的是既沒(méi)在當(dāng)前控件中說(shuō)明又沒(méi)在后面列出默認(rèn)值的屬性

# 對(duì)當(dāng)前控件無(wú)效果的控件也可能在列出默認(rèn)值后面說(shuō)明

# 不止控件有屬性,布局管理器和控件中的對(duì)象(像Canvas中的畫布對(duì)象)也有屬性

# 布局管理器的屬性介紹會(huì)在后面重復(fù)介紹


五、布局管理器

(1)、概念

布局管理器(或形狀管理器, Geometry Manager)用于指定多個(gè)控件在窗口(共同的主控件)內(nèi)的相對(duì)位置,從而實(shí)現(xiàn)對(duì)窗口和控件布局的目的

# 以下三個(gè)布局管理器都是tkinter模塊的類,控件類繼承自它們,有它們的所有方法

(2)、Pack

Pack是一種較為簡(jiǎn)單的布局管理器,按添加順序排列控件。與Place相比,Pack可接受定性的相對(duì)關(guān)系——上面、左面、填充等,并確定精確的位置坐標(biāo)

# 父控件的大小都由其內(nèi)部的子控件大小決定(除非父控件調(diào)用pack_propagate(False))

補(bǔ)充:如果控件2比控件1后被實(shí)例化,則控件2圖層在控件1之上

# 修改堆疊順序見lower()和tkraise()方法

1.pack(cnf={}, **kw)

# 別名:pack_configure, configure, config

# 可通過(guò)別名調(diào)用此方法,其中configure, config在Pack實(shí)例中調(diào)用是此方法,在其他控件中調(diào)用是控件對(duì)應(yīng)設(shè)置控件屬性的方法

將子控件包裝到父控件,屬性如下:

# 使用關(guān)鍵字傳參

anchor:控件在窗口中的對(duì)齊方式,值必須是'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'或'center'。

'center'是默認(rèn)值

# e w s n分別表示東西南北,center表示中間

after, before:值必須是一個(gè)調(diào)用過(guò)pack()的控件,被調(diào)用的控件將會(huì)在傳入值的控件之前/之后進(jìn)行包裝

expand:值為True則在父控件大小增加時(shí),擴(kuò)展子控件;值為False(默認(rèn)值)則不擴(kuò)展

fill:值為'x', 'y', 'both', 'none'。'x', 'y', 'both'分別表示允許控件在水平/垂直/同時(shí)兩個(gè)方向進(jìn)行拉伸,'none'(默認(rèn)值)表示不允許控件進(jìn)行拉伸

# 傳入內(nèi)置常量None等同于字符串'none'

in, in_:指定包裝到的父控件,默認(rèn)為主窗口

# 因?yàn)閕n是關(guān)鍵字,所有關(guān)鍵字傳參時(shí)用in_,使用cnf設(shè)置時(shí)用in或in_

# 這里“父控件”只是在包裝中的父控件,而不是真正的父控件。這可能會(huì)造成包裝后由于子控件堆疊順序低而不顯示在屏幕上,所以建議包裝在控件中的都應(yīng)為它的子控件

ipadx, ipady:指定子控件邊框和內(nèi)容之間的距離(內(nèi)邊距),分別是水平和垂直,默認(rèn)值都為0,單位是像素

padx, pady:指定子控件邊框周圍的空間(外邊距),分別是水平和垂直,默認(rèn)值都為0,單位是像素。如果值是一個(gè)有兩個(gè)值的列表,則這兩個(gè)值分別指定控件兩邊的外邊距(左邊和右邊、上邊和下邊)

# 這里的ipadx, ipady, padx, pady指定的值是每一側(cè)的距離

side:子控件放置在父控件的位置,值為'top', 'bottom', 'left', 'right',分別是頂部/底部/左邊/右邊

cnf——將屬性名稱映射到值的字典

補(bǔ)充:尺寸

控件的長(zhǎng)度、寬度和其他尺寸不僅可以用整數(shù)來(lái)描述:

如果尺寸是一個(gè)整數(shù),則它被認(rèn)為是以像素為單位

如果尺寸是一個(gè)浮點(diǎn)數(shù),則它被認(rèn)為是以像素為單位并四舍五入

如果尺寸是一個(gè)字符串,則它需要是以下形式:

'<整數(shù)/浮點(diǎn)數(shù)><單位>'

其中單位有:

c:厘米

i:英寸

m:毫米

p:打印分辨率(1/72英寸)

尺寸最后都將被轉(zhuǎn)換為像素(通過(guò)dpi)

# 該文檔沒(méi)特殊說(shuō)明的有關(guān)長(zhǎng)度、寬度或其他尺寸的設(shè)置都適用

# 一些地方如果尺寸設(shè)置為負(fù),則代表最小尺寸

示例:

運(yùn)行結(jié)果:

拉伸主窗口前:

?


手動(dòng)拉伸主窗口后:


2.pack_info()

# 別名:info

以字典形式返回關(guān)于控件的包裝屬性的值,控件被包裝后才可調(diào)用,否則引發(fā)_tkinter.TclError

3.pack_forget()

# 別名:forget

解除子控件被包裝到父控件,忽略原有設(shè)置

# 下面兩個(gè)方法應(yīng)由父控件調(diào)用

4.pack_propagate(flag=['_noarg_'])

# 別名:propagate

設(shè)置父控件是否會(huì)自動(dòng)調(diào)節(jié)尺寸以容納所有子控件,默認(rèn)為True。不帶參數(shù)調(diào)用此方法則返回當(dāng)前設(shè)置

5.pack_slaves()

# 別名:slaves

以列表形式返回父控件的所有被包裝的子控件,按其包裝順序排列

# Pack具體工作過(guò)程見https://tcl.tk/man/tcl8.6/TkCmd/pack.htm中的“THE PACKER ALGORITHM”

(3)、Grid

Grid是一種基于網(wǎng)格式的布局管理器,按行列形式排列控件

1.gird(cnf={}, **kw)

別名:grid_configure, configure, config

將子控件以行列形式排列到父控件,屬性如下:

# 使用關(guān)鍵字傳參

column:控件插入的列。窗體最左邊的為起始列(第0列),默認(rèn)值為第0列

row:控件插入的行。窗體最上面的為起始行(第0行),默認(rèn)值為當(dāng)前最大行的下一行

columnspan:控件所跨的列數(shù)。默認(rèn)值為1

rowspan:控件所跨的行數(shù)。默認(rèn)值為1

# columnspan和rowspan會(huì)覆蓋所跨的單元格

sticky:通過(guò)E, W, S, N組合的字符串來(lái)定位子控件在單元格的位置(子控件附在單元格邊界上),默認(rèn)值為空字符串(居中)

# E, W, S, N大小寫均可以

ipadx, ipady, padx, pady:同Pack,默認(rèn)值都為0

cnf——將屬性名稱映射到值的字典

示例1: ?# 打印九九乘法表

運(yùn)行結(jié)果:

示例2: ?# 演示跨行/列

運(yùn)行結(jié)果:

補(bǔ)充:

同一個(gè)控件連續(xù)調(diào)用兩次布局管理器,第二次指定的值會(huì)替代第一次指定的值,沒(méi)指定的繼續(xù)使用第一次指定的值

同一個(gè)父控件Pack和Grid布局管理器不能同時(shí)使用

2.grid_bbox(column=None, row=None, col2=None, row2=None)

# 別名:bbox

# 由父控件調(diào)用

返回一個(gè)4元組描述父控件內(nèi)一些或全部子控件的邊界大小:

(列坐標(biāo), 行坐標(biāo), 寬度, 高度),前兩個(gè)數(shù)指定父控件中左上角的偏移量(也就是一個(gè)點(diǎn)的坐標(biāo)),后兩個(gè)數(shù)指定了寬度和高度(向右和下延伸)

如果沒(méi)給出參數(shù),則返回的參數(shù)是描述全部單元格的邊界大小

如果給出column和row,則返回的參數(shù)是描述指定坐標(biāo)的單元格的邊界大小

如果給出column, row, col2, row2則返回參數(shù)是描述(column, row)單元格到(col2, row2)單元格的邊界大小

傳入的參數(shù)都是坐標(biāo)(可以是負(fù)的),返回的值都是以像素為單位

# 因?yàn)門kinter在屏幕上繪制控件之前不會(huì)計(jì)算坐標(biāo),所以在主循環(huán)啟動(dòng)后或調(diào)用此方法之前調(diào)用主窗口root的root.update()方法強(qiáng)制繪制窗口才能得到結(jié)果

示例:

運(yùn)行結(jié)果:

(0, 0, 250, 250)

(200, 200, 50, 50)

(100, 100, 150, 150)

(0, 100, 100, 150)

3.grid_info()

# 別名:info

以字典形式返回關(guān)于控件的Grid屬性的值,控件調(diào)用grid()前調(diào)用此函數(shù)返回空字典

4.grid_forget()

# 別名:forget

解除子控件被排列到父控件,忽略原有設(shè)置

5.grid_propagate(flag=['_noarg_'])

# 別名:propagate

同Pack.pack_propagate()

6.grid_slaves(row=None, column=None)

# 別名:slaves

以列表形式返回父控件指定行列的所有被包裝的子控件,按其包裝順序排列。參數(shù)值為None代表任意行列

7.grid_size()

# 別名:size

返回網(wǎng)格大小的二元組:(列數(shù), 行數(shù))

8.grid_remove()

解除子控件被排列到父控件,記住原有設(shè)置

9.grid_location(x, y)

# 別名:location

返回位于給定坐標(biāo)(x, y)的網(wǎng)格位置(x, y單位都是像素),返回值是一個(gè)二元組:(列, 行)

# 此方法不用在主循環(huán)或root.update()之后使用

10.grid_rowconfigure(index, cnf={}, **kw)

# 別名:rowconfigure

如果給出屬性項(xiàng),則設(shè)置指定行index的屬性;否則獲取指定行index的屬性,屬性項(xiàng)如下:

minsize:該行的最小高度,單位是像素,默認(rèn)值為0

pad:該行中最大網(wǎng)格垂直邊距,單位是像素,默認(rèn)值為0

# 垂直邊距是與上下兩邊的距離,如果值為奇數(shù)則優(yōu)先與下邊距離遠(yuǎn)

weight:該行占額外空間的權(quán)重,是一個(gè)整數(shù),默認(rèn)值為0

uniform:可以是任意值,同一控件的不同行如果有除None以外的相同值則將它們放在同一組中。為屬于同一組的行按weight值分配空間,所以它們的大小始終與weight值嚴(yán)格成比例。默認(rèn)值為None

cnf——同Pack.pack()

11.grid_columnconfigure(index, cnf={}, **kw)

# 別名:columnconfigure

如果給出屬性項(xiàng),則設(shè)置指定列index的屬性;否則獲取指定列index的屬性,屬性項(xiàng)如下:

minsize:該列的最小寬度,單位是像素,默認(rèn)值為0

pad:該列中最大網(wǎng)格水平邊距,單位是像素,默認(rèn)值為0

# 水平邊距是與左右兩邊的距離,如果值為奇數(shù)則優(yōu)先與右邊距離遠(yuǎn)

weight:該列占額外空間的權(quán)重,是一個(gè)整數(shù),默認(rèn)值為0

uniform:同Grid.grid_rowconfigure()

cnf——同Pack.pack()

示例:

運(yùn)行結(jié)果:

(4)、Place

Place進(jìn)行布局管理更加精細(xì)化,可以直接指定控件在窗體內(nèi)的絕對(duì)位置,或者相對(duì)于其他控件定位的相對(duì)位置,也可以指定控件的大小

# Place布局管理器不會(huì)自動(dòng)調(diào)節(jié)父控件的大小

1.place(cnf={}, **kw)

# 別名:place_configure, configure, config

將子控件定位到父控件,屬性如下:

# 使用關(guān)鍵字傳參

in, in_:指定定位到的父控件,默認(rèn)為主窗口

anchor:在子控件內(nèi)的錨點(diǎn)位置,值必須是'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'或'center'。'nw'是默認(rèn)值

x, y:子控件相對(duì)于錨點(diǎn)水平和垂直偏移位置,單位是像素,默認(rèn)值都為0

relx, rely:子控件相對(duì)于父控件的水平和垂直位置,默認(rèn)值都為0

# 同時(shí)指定x, relx/y, rely,relx/rely優(yōu)先生效,再根據(jù)x/y相對(duì)于生效后錨點(diǎn)偏移

width, height:控件的寬度和高度,單位是像素,默認(rèn)值都為空字符串,表示控件設(shè)置

relwidth, relheight:子控件相對(duì)于父控件的寬度和高度,默認(rèn)值都為空字符串

# 同時(shí)指定width, relwidth/height, relheight,relwidth/relheight優(yōu)先生效,再加上width/height指定的寬度/高度。width/height可以是負(fù)數(shù),在這里代表減去的值而不是最小寬度/高度

# relx, rely, relwidth, relheight為1.0分別表示右邊、底邊、相同寬度和相同高度

# relx, rely, relwidth, relheight可以大于1.0或?yàn)樨?fù)數(shù)。relwidth, relheight為負(fù)數(shù)相當(dāng)于為0.0,大于1.0是父控件寬度和高度的倍數(shù);relx, rely為負(fù)數(shù)則位置向左,大于1.0是父控件水平和垂直位置的倍數(shù)

bordermode:子控件定位時(shí),是否考慮父控件的的邊框,'inside'(默認(rèn)值)是不考慮,'outside'或'ignore'是考慮

# 例如Label控件指定highlightthickness設(shè)置高亮邊框?qū)挾?/span>

# Canvas控件指定highlightthickness設(shè)置的高亮邊框總會(huì)被考慮

# 關(guān)于該屬性進(jìn)一步的詳細(xì)介紹見https://tcl.tk/man/tcl8.6/TkCmd/place.htm

cnf——將屬性名稱映射到值的字典

# 無(wú)參數(shù)調(diào)用此方法不會(huì)將子控件定位到父控件


示例1:

運(yùn)行結(jié)果:

拉伸前:

橫向拉伸后:

示例2:


運(yùn)行結(jié)果:

2.place_info()

# 別名:info

以字典形式返回關(guān)于控件的Place屬性的值,控件調(diào)用place()前調(diào)用此函數(shù)返回空字典

3.place_forget()

# 別名:forget

解除子控件被定位到父控件,忽略原有設(shè)置

4.place_slaves()

以列表形式返回父控件的所有被定位的子控件,按其包裝順序排列

補(bǔ)充:Tkinter中的坐標(biāo)系

以左上角為原點(diǎn)(0, 0),X坐標(biāo)向右增加,Y坐標(biāo)向下增加。基本單位是像素

補(bǔ)充:Place布局管理器和其他布局管理器共用

Place布局管理器可以和Pack布局管理器或Grid布局管理器共用。共用時(shí)要注意控件的堆疊順序以防一個(gè)控件遮蓋另一個(gè)控件

示例:

運(yùn)行結(jié)果:

補(bǔ)充:tkinter模塊中的常量

tkinter模塊中有一些像E, DISABLED, BOTH這樣的常量,它們的值都是常量名對(duì)應(yīng)的字符串,方便傳參

在tkinter.constants模塊中可以查看,下面列出其中所有的常量

布爾值:

NO=FALSE=OFF=0

YES=TRUE=ON=1

用于anchor和sticky:

N, S, W, E, NW, SW, NE, SE, NS, EW, NSEW, CENTER

用于fill:

NONE, X, Y, BOTH

用于side:

LEFT, TOP, RIGHT, BOTTOM

用于relief:

RAISED, SUNKEN, FLAT, RIDGE, GROOVE, SOLID

用于orient:

HORIZONTAL, VERTICAL

用于tabs:

NUMERIC

用于wrap:

CHAR, WORD

用于align:

BASELINE

用于bordermode:

INSIDE, OUTSIDE

特殊標(biāo)簽、標(biāo)記和插入位置:

SEL, SEL_FIRST, SEL_LAST, END, INSERT, CURRENT, ANCHOR, ALL

文本控件和按鈕控件的狀態(tài):

NORMAL, DISABLED, ACTIVE

畫布控件的狀態(tài):

HIDDEN

菜單項(xiàng)類型:

CASCADE, CHECKBUTTON, COMMAND, RADIOBUTTON, SEPARATOR

列表框的選擇模式:

SINGLE, BROWSE, MULTIPLE, EXTENDED

列表框active line樣式:

NONE, DOTBOX, UNDERLINE

畫布的各種樣式:

PIESLICE, CHORD, ARC, FIRST, LAST, BUTT, PROJECTING, ROUND, BEVEL, MITER

用于xview, yview:

MOVETO, SCROLL, UNITS, PAGES


六、主窗口(Tk)與控件對(duì)象部分方法

(1)、構(gòu)造方法

tkinter.Tk(screenName=None, baseName=None, className='Tk', useTk=True, sync=False, use=None)

構(gòu)造一個(gè)最高層級(jí)的Tk控件,這通常是一個(gè)應(yīng)用程序的主窗口,并為這個(gè)控件初始化Tcl解釋器。每個(gè)實(shí)例都有其格自所關(guān)聯(lián)的Tcl解釋器

# Tk類通常全部使用默認(rèn)值來(lái)初始

className——控件類的名稱。會(huì)被用作預(yù)置文件同時(shí)也作為Tcl發(fā)起調(diào)用的名稱,默認(rèn)值為'Tk'

# 會(huì)被用作窗口的標(biāo)題

# 參數(shù)具體說(shuō)明見https://docs.python.org/zh-cn/3.12/library/tkinter.html

(2)、屬性項(xiàng)

bd, borderwidth, class, menu, relief, screen, use, background, bg, colormap, container, cursor, height, highlightbackground, highlightcolor, highlightthickness, padx, pady, takefocus, visual, width

# colormap, visual屬性分別是顏色映射和框架顯示,大部分取值是針對(duì)過(guò)去低端的顯示設(shè)備,這里不詳細(xì)說(shuō)明

# menu屬性在Menu控件中說(shuō)明

# class屬性在“屬性項(xiàng)數(shù)據(jù)庫(kù)”章節(jié)中說(shuō)明

# use屬性將在Toplevel控件中說(shuō)明

1.background或bg

指定控件的背景顏色,默認(rèn)值由系統(tǒng)指定,為防止更新可設(shè)置為空字符串

補(bǔ)充:顏色

在Tkinter中一般有兩種方法來(lái)指定顏色

1.顏色的十六進(jìn)制數(shù),即紅、綠、藍(lán)三種顏色不同比例的混合色:

#rgb:每種顏色四位

#rrggbb:每種顏色八位

#rrrgggbbb:每種顏色十二位

# 十六進(jìn)制字母小寫大小都可以

2.本地定義的標(biāo)準(zhǔn)顏色名稱:

'white', 'black' 'red', 'green', 'blue', 'cyan', 'yellow'和'magenta'顏色名稱始終可用。其他顏色名稱取決于本地環(huán)境

# 'green'對(duì)應(yīng)的十六進(jìn)制數(shù)是#008000,'green1'對(duì)應(yīng)的十六進(jìn)制數(shù)是#00ff00

# 其他顏色名稱見https://tcl.tk/man/tcl8.6/TkCmd/colors.htm

2.width, height

指定控件的寬度和高度,文本控件以字符為單位,其他控件以像素為單位,默認(rèn)值為0

3.relief

指定控件的邊框樣式(3D效果),參數(shù)值為'flat'(平的), 'raised'(凸起的), 'sunken'(凹陷的), 'groove'(溝槽樁邊緣), 'ridge'(脊?fàn)钸吘墸? 'solid'(實(shí)心),默認(rèn)值為'flat'

瀏覽圖如下:

4.borderwidth或bd

指定控件的邊框?qū)挾?,單位是像素,默認(rèn)值為0

# 邊框樣式只有在邊框?qū)挾炔粸?是才能顯示


5.highlightthickness

指定控件的高亮邊框的寬度,單位是像素,默認(rèn)值為0

# 高亮邊框就是當(dāng)控件有焦點(diǎn)時(shí)圍繞在周圍的矩形

6.highlightcolor

當(dāng)控件獲得焦點(diǎn)時(shí)高亮邊框的顏色,默認(rèn)值由系統(tǒng)指定

7.highlightbackground

當(dāng)控件沒(méi)獲得焦點(diǎn)時(shí)高亮邊框的顏色,默認(rèn)值由系統(tǒng)指定

示例:??# 高亮邊框的示例

運(yùn)行結(jié)果:

有焦點(diǎn):

無(wú)焦點(diǎn):

8.cursor

當(dāng)鼠標(biāo)移動(dòng)到控件上時(shí)的鼠標(biāo)樣式,可選值參見:

https://tcl.tk/man/tcl8.6/TkCmd/cursors.htm

https://tkdocs.com/shipman/cursors.html??# 具體顯示由操作系統(tǒng)決定

舉例:arrow(箭頭), plus(加號(hào)), crosshair(十字線), fleur(十字花), watch(待加載圓圈), xterm(輸入光標(biāo)), X_cursor(X型光標(biāo))

# 不區(qū)分大小寫

9.takefocus

當(dāng)值為1時(shí),焦點(diǎn)可以通過(guò)TAB鍵移動(dòng)到控件上;否則當(dāng)值為0時(shí),焦點(diǎn)不可以通過(guò)TAB鍵移動(dòng)到控件上。默認(rèn)值為0

10.screen

指定放置新窗口的屏幕。任何有效的屏幕名稱都可使用

(3)、部分方法

# 這里即包括控件對(duì)象共有的方法,又包括窗口控件的方法,所以非常多

# 如果只是想看主窗口控件的方法,可以從83個(gè)方法開始?;蚴翘^(guò)此章節(jié)剩余部分,先查看后面的幾個(gè)控件再?gòu)倪@里開始。或是直接從這里開始查看不跳過(guò)(個(gè)人在編寫的時(shí)候是先編寫這些方法的)

# 有些方法或方法的參數(shù)牽連到其他知識(shí),會(huì)只寫出而不做具體介紹

1.report_callback_exception(exc, val, tb)

將回調(diào)而引發(fā)的異常輸出到sys.stderr

# 需要自定義可將另一個(gè)3個(gè)參數(shù)的函數(shù)賦值給此函數(shù)

以下是全局方法,這些方法適用于所有控件,但在全局范圍內(nèi)有效,而不是作用于單個(gè)控件。按照慣例,應(yīng)由主窗口控件調(diào)用

2.bell(displayof=0)

鳴響displayof所在的顯示器的震鈴,默認(rèn)使用應(yīng)用的主窗口的顯示器

# '.'表示主窗口

3.deletecommand(name)

刪除name中提供的Tcl命令,name是一個(gè)字符串

# str(widget)返回控件的name

4.getboolean(s)

返回一個(gè)布爾值

s——是一個(gè)字符串。如果是'0', 'false', 'no'或'off'中的任何一個(gè),則返回False;如果是'1', 'true', 'yes', 'on'中的任何一個(gè),則返回True。這些值都可以縮寫(除了'o')且不區(qū)分大小寫

# 雖然s也可以是數(shù)值類型

5.getint(s)

返回一個(gè)十進(jìn)制整數(shù)

s——是一個(gè)字符串。前后可以留空白,可以帶符號(hào),在空白和符號(hào)之后的字符為'0x'則為十六進(jìn)制、'0o'或'0'則為八進(jìn)制形式、'ob'則為二進(jìn)制形式

6.getdouble(s)

返回一個(gè)浮點(diǎn)數(shù)

s——是一個(gè)字符串。形式:[空白][符號(hào)][數(shù)字]['.'數(shù)字]['e'[符號(hào)]數(shù)字][空白]

7.setvar(name='PY_VAR', value='1')

設(shè)置Tcl變量name的值value

8.getvar(name='PY_VAR')

返回Tcl變量name的值

9.mainloop(n)

事件循環(huán),直到所有窗口被關(guān)閉

n——當(dāng)主窗口數(shù)量下降到n時(shí)退出事件循環(huán)并繼續(xù)執(zhí)行代碼

示例:

運(yùn)行結(jié)果:

開始事件循環(huán)

# 出現(xiàn)5個(gè)窗口

# 關(guān)到剩3個(gè)窗口時(shí),3個(gè)窗口未響應(yīng)

結(jié)束事件循環(huán)

# 五秒后

執(zhí)行結(jié)束

# 3個(gè)窗口被關(guān)閉

10.quit()

退出Tcl解釋器。所有控件都將被銷毀

11.nametowidget(name)

返回名為name的控件

name——是一個(gè)字符串或控件

# name如果傳入控件則返回控件本身

# 也就是返回控件的標(biāo)識(shí)符

12.after(ms, func=None, *args)

等待毫秒ms后調(diào)用func并使用args作為傳入的位置參數(shù)。返回用于after_cancel()取消調(diào)度的標(biāo)識(shí)符

# 此方法在調(diào)用時(shí)就直接返回并開始計(jì)時(shí),事件循環(huán)時(shí)才調(diào)用函數(shù)

13.after_idle(func, *args)

如果Tcl主循環(huán)沒(méi)有事件需要處理,就調(diào)用func并使用args作為傳入的位置參數(shù)。返回用于after_cancel()取消調(diào)度的標(biāo)識(shí)符

14.after_cancel(id)

取消標(biāo)識(shí)符id的函數(shù)的調(diào)度

15.clipboard_get(**kw)

讀取并返回剪貼板的內(nèi)容,可選關(guān)鍵字參數(shù)如下:

displayof:讀取指定displaypf所在的顯示器上的剪貼板,默認(rèn)值為Tkinter的主窗口

type:指定返回?cái)?shù)據(jù)的形式,是一個(gè)原子名稱,默認(rèn)值為'STRING',詳情參見客戶間通信協(xié)定手冊(cè)(ICCCM)

# 在X11上,默認(rèn)值先嘗試'UTF8_STRING',失敗后退回'STRING'

此方法相當(dāng)于:

selection_get(selection='CLIPBOARD')

# 如果剪貼框內(nèi)容不存在或不是文本類型會(huì)引發(fā)TclError異常

16.clipboard_clear(**kw)

清空剪貼板中的內(nèi)容,可選關(guān)鍵字參數(shù)如下:

displayof:同clipboard_get()

17.clipboard_append(string, **kw)

將string追加到剪貼板中,可選關(guān)鍵字參數(shù)如下:

displayof, type:同clipboard_get()

format:指定用來(lái)把選擇傳輸?shù)秸?qǐng)求者的表示法,默認(rèn)值為'STRING'

# 追加前會(huì)清空剪貼板中的內(nèi)容,且在調(diào)用mainloop()時(shí)才真正添加到剪貼板

18.tk_bisque()

將顏色方案改為Tk 3.6及以前使用的淺棕色

19.tk_focusFollowsMouse()

鼠標(biāo)下的控件會(huì)自動(dòng)獲得焦點(diǎn)。不容易被禁用

# 需要主窗口先得到焦點(diǎn),且控件的takefocus選項(xiàng)不為False或0

示例:

運(yùn)行結(jié)果:

# 焦點(diǎn)在其中一個(gè)輸入框,并能直接輸入文本

20.tk_focusNext()

21.tk_focusPrev()

返回當(dāng)前擁有焦點(diǎn)的控件的焦點(diǎn)順序的下一個(gè)/上一個(gè)控件

焦點(diǎn)順序首先到下一個(gè)子控件,然后遞歸到子控件的子控件,然后到堆疊順序中的下一個(gè)同級(jí)控件。如果控件的takefouces屬性設(shè)置為0,則它被忽略

# 后創(chuàng)建的控件堆疊在先創(chuàng)建控件的上面

# 設(shè)置控件的堆疊順序見lower()和tkraise()方法

22.tk_setPalette(*args, **kw)

為所有控件設(shè)置一個(gè)新的顏色方案

如果只傳入一個(gè)參數(shù),則這個(gè)參數(shù)是用來(lái)設(shè)置背景顏色

如果傳入多個(gè)參數(shù),則參數(shù)的個(gè)數(shù)必須是偶數(shù)個(gè),每?jī)蓚€(gè)參數(shù)的第一個(gè)指定屬性名稱,第二個(gè)指定顏色(屬性的新值)

如果傳入序列,則將序列扁平化(轉(zhuǎn)成一維)后將每個(gè)元素作為位置參數(shù)

此外可以使用關(guān)鍵字傳參,鍵是屬性名稱,值是指定顏色

調(diào)用此方法,必須有一個(gè)是設(shè)置背景顏色

支持以下屬性名稱:

activeBackground, foreground, selectColor, activeForeground, highlightBackground, selectBackground, background, highlightColor, selectForeground, disabledForeground, insertBackground, troughColor

示例:


運(yùn)行結(jié)果:

有焦點(diǎn):

無(wú)焦點(diǎn):

23.tk_strictMotif(boolean=None)

設(shè)置Tcl內(nèi)置變量tk_strictMotif的值,外觀和感覺(jué)是否遵循Motif,默認(rèn)值為0。值為1意味堅(jiān)持Motif(例如鼠標(biāo)經(jīng)過(guò)滑塊不會(huì)改變顏色)

返回設(shè)置后的值。如果沒(méi)傳入?yún)?shù),則返回當(dāng)前值

24.update()

進(jìn)入事件循環(huán),直到所有待處理的事件都被Tcl處理完畢

25.update_idletasks()

進(jìn)入事件循環(huán),直到所有的空閑回調(diào)都被調(diào)用。這將更新窗口的顯示,但不處理由用戶引起的事件

# 空閑回調(diào)是after_idle()方法

# 與update()的區(qū)別是只會(huì)處理空閑回調(diào),像控件包裝之類的不會(huì)處理

示例:

運(yùn)行結(jié)果1:

func()被調(diào)用

運(yùn)行結(jié)果2??# 將14行改為root.update_idletasks()

func()被調(diào)用

26.wait_variable(name='PY_VAR')

# 別名:waitvar

阻塞,直到變量name被修改

# 阻塞時(shí)會(huì)進(jìn)行主循環(huán),變量name是Tcl變量

27.wait_visibility(window=None)

阻塞,直到控件window的可見性發(fā)生變化。如果沒(méi)給出參數(shù)則使用self

# 實(shí)測(cè)當(dāng)控件所處窗口最大化,最小化和控件出現(xiàn)時(shí)會(huì)結(jié)束等待

28.wait_window(window=None)

阻塞,直到控件window被銷毀。如果沒(méi)給出參數(shù)則使用self

# 調(diào)用控件的destroy()方法銷毀控件

# 后文所說(shuō)的調(diào)用控件指調(diào)用方法的控件

?

以下方法繼承自父類Misc,所有控件都可調(diào)用

29.cget(key)

以字符串形式返回控件屬性key的值

30.configure(cnf=None, **kw)

# 別名:config

見四、(1)

31.destroy()

銷毀調(diào)用的控件和它的子控件

32.keys()

返回控件所有屬性名稱的列表

33.lower(belowThis=None)

將調(diào)用控件的堆疊順序降到控件belowThis的下面

省略belowThis則將其堆疊順序降到最低

34.tkraise(aboveThis=None)

# 別名:lift

將調(diào)用控件的堆疊順序升到控件aboveThis的上面

省略belowThis則將其堆疊順序升到最高

補(bǔ)充:堆疊順序低的用TAB自動(dòng)選擇焦點(diǎn)時(shí)先被選擇

補(bǔ)充:如果一個(gè)控件想要在另一個(gè)控件之上,包括使用布局管理器和控件自帶方法,必須確保這個(gè)控件的堆疊順序高于另一個(gè)控件,否則不會(huì)顯示

# 子控件堆疊順序總高于父控件


35.focus_get()

返回當(dāng)前應(yīng)用程序中擁有焦點(diǎn)的控件。如果應(yīng)用程序沒(méi)有焦點(diǎn)則返回None

36.focus_displayof()

返回調(diào)用控件所在顯示器上擁有焦點(diǎn)的控件。如果應(yīng)用程序沒(méi)有焦點(diǎn)則返回None

37.focus_lastfor()

返回窗口激活后將獲得焦點(diǎn)的控件。與focus_get()不同的是如果應(yīng)用程序沒(méi)有焦點(diǎn)也會(huì)返回?fù)碛薪裹c(diǎn)后將獲得焦點(diǎn)的控件

# 因?yàn)樾枰{(diào)用root.update()來(lái)更新窗口(讓控件出現(xiàn)在窗口上),所以在沒(méi)更新窗口之前調(diào)用此函數(shù)通常返回主窗口控件

38.focus_set()

# 別名:focus

將焦點(diǎn)指向調(diào)用控件。如果應(yīng)用程序當(dāng)前沒(méi)有焦點(diǎn),則一旦應(yīng)用程序通過(guò)窗口管理器獲得焦點(diǎn),調(diào)用控件將獲得焦點(diǎn)

39.focus_force()

將焦點(diǎn)指向調(diào)用控件,即使應(yīng)用程序沒(méi)有焦點(diǎn)。請(qǐng)謹(jǐn)慎使用!

40.grab_set()

將調(diào)用控件設(shè)置焦點(diǎn)抓取

如果設(shè)置焦點(diǎn)抓取,則在應(yīng)用程序中只能操作焦點(diǎn)抓取的控件和它的子控件(所有事件只能在該控件處理)

# 實(shí)測(cè)同時(shí)只能一個(gè)控件設(shè)置焦點(diǎn)抓取

41.grab_set_global()

將調(diào)用控件設(shè)置全局焦點(diǎn)抓取。請(qǐng)謹(jǐn)慎使用——其他應(yīng)用程序不會(huì)再得到事件

# 例如在多進(jìn)程中,設(shè)置其中一個(gè)進(jìn)程的一個(gè)控件全局焦點(diǎn)抓取,另一個(gè)進(jìn)程的窗口不能再操作

42.grab_current()

返回當(dāng)前應(yīng)用程序中被焦點(diǎn)抓取的控件,如果沒(méi)有則返回None

43.grab_status()

返回調(diào)用控件的焦點(diǎn)抓取狀態(tài):None, 'local', 'global'

44.grab_release()

釋放控件焦點(diǎn)抓取

45.winfo_atom(name, displayof=0)

返回原子名稱name的整數(shù)標(biāo)識(shí)符。如果沒(méi)有以name命名的原子存在,則新創(chuàng)建一個(gè)原子

displayof——在指定displaypf所在的顯示器上尋找,默認(rèn)值在主窗口的顯示器上尋找

46.winfo_atomname(id, displayof=0)

返回整數(shù)表示符為id的原子名稱,原子不存在會(huì)引發(fā)TclError

displayof:同winfo_atom()

47.winfo_children()

返回調(diào)用控件所有子控件的列表

48.winfo_parent()

返回調(diào)用控件父控件的名稱,如果父控件是主窗口則返回空字符串

49.winfo_class()

返回調(diào)用控件的控件類名

# 像創(chuàng)建控件類的子類然后創(chuàng)建實(shí)例調(diào)用此方法會(huì)返回控件類名而不是子類名

# 主窗口控件的類名可在構(gòu)建時(shí)傳入className參數(shù)指定

50.winfo_containing(rootX, rootY, displayof=0)

返回位于電腦屏幕rootX, rootY的控件

displayof:同winfo_atom()


示例:

運(yùn)行結(jié)果:

.!canvas

.!canvas2

.!canvas2

51.winfo_depth()

返回像素位深度(每個(gè)像素所用的位數(shù))

52.winfo_exists()

如果調(diào)用控件存在則返回1,否則返回0

53.winfo_fpixels(number)

返回給定距離number(例如'3c')的像素值,是一個(gè)浮點(diǎn)數(shù)

54.winfo_pixels(number)

返回winfo_fpixels()的四舍五入指,是一個(gè)整數(shù)


55.winfo_geometry()

返回調(diào)用控件的geometry string:"widthxheight+X+Y"

# 未進(jìn)入主循環(huán)前需要先調(diào)用root.update()來(lái)更新窗口(映射控件)

補(bǔ)充:geometry string

geometry string是描述桌面上頂層窗口的大小和位置的標(biāo)準(zhǔn)方式,形式如下:

'wxh±x±y'

其中x, ±都是字符,±表示'+'或'-'。有以下三種形式:

'wxh', '±x±y', 'wxh±x±y'

w, h:窗口的寬度和高度,單位是像素

x:如果為+x則是距離桌面左邊有x個(gè)像素;如果為-x則是距離桌面右邊有y個(gè)像素

y:如果為+y則是距離桌面上邊有y個(gè)像素;如果為-y則是距離桌面下邊有y個(gè)像素

56.winfo_width()

返回調(diào)用控件的寬度

57.winfo_height()

返回調(diào)用控件的高度

# 以上兩個(gè)方法需要先映射控件,值會(huì)隨著窗口的改變而更新

58.winfo_reqwidth()

返回調(diào)用控件的請(qǐng)求寬度

59.winfo_reqheight()

返回調(diào)用控件的請(qǐng)求高度

# 以上兩個(gè)方法不需要先映射控件,值不會(huì)隨著窗口的改變而更新

# 注意窗口控件調(diào)用返回的寬度和高度不包括窗口邊框

60.winfo_rootx()

返回調(diào)用控件在桌面左上角的x坐標(biāo)

61.winfo_rooty()

返回調(diào)用控件在桌面左上角的y坐標(biāo)

62.winfo_x()

返回調(diào)用控件在窗口左上角的x坐標(biāo)

63.winfo_y()

返回調(diào)用控件在窗口左上角的y坐標(biāo)

64.winfo_id()

返回調(diào)用控件的標(biāo)識(shí)符ID

65.winfo_interps(displayof=0)

返回displaypf所在的顯示器上的所有Tcl解釋器的名稱

66.winfo_ismapped()

如果調(diào)用控件被映射(可見)則返回1,否則返回0

67.winfo_viewable()

如果調(diào)用控件和它的父控件都被映射則返回1,否則返回0

68.winfo_manager()

返回調(diào)用控件布局管理器的名稱,無(wú)則返回空字符串

# 例如pack, grid, place,如果布局管理器是一個(gè)控件,則返回控件類的類名

69.winfo_name()

返回調(diào)用控件的名稱

70.winfo_pathname(id, displayof=0)

返回給定ID的路徑名稱


71.winfo_pointerx()

72.winfo_pointery()

73.winfo_pointerxy()

如果鼠標(biāo)指針與窗口在同一屏幕上,則分別是返回鼠標(biāo)指針的x坐標(biāo)、y坐標(biāo)、(x坐標(biāo), y坐標(biāo))。如果不在同一屏幕上則返回-1

74.winfo_rgb(color)

返回顏色color的RGB色彩值。返回一個(gè)三元組,每個(gè)值在0和65535之間

75.winfo_server()

返回屏幕的服務(wù)器信息

76.winfo_toplevel()

返回調(diào)用控件的頂級(jí)窗口控件

77.winfo_screen()

返回與窗口相關(guān)的屏幕名稱

78.winfo_screendepth()

返回與窗口相關(guān)的屏幕的像素位深度(每個(gè)像素所用的位數(shù))

79.winfo_screenwidth()

返回與窗口相關(guān)的屏幕的寬度,單位是像素

80.winfo_screenheight()

返回與窗口相關(guān)的屏幕的高度,單位是像素

81.winfo_screenmmwidth()

返回與窗口相關(guān)的屏幕的寬度,單位是毫米

82.winfo_screenmmheight()

返回與窗口相關(guān)的屏幕的高度,單位是毫米

?

以下方法繼承自父類Wm,只有Tk和Toplevel控件才可調(diào)用

# Wm是Window manager(窗口管理器)的縮寫

83.wm_aspect(minNumer=None, minDenom=None, maxNumer=None, maxDenom=None)

別名:aspect

指示窗口管理器將調(diào)用控件的寬高比(寬度/高度)設(shè)置為minNumer / minDenom和maxNumer / maxDenom之間。如果都指定為空字符串,則原有限制將刪除。如果沒(méi)給出參數(shù),則返回(minNumer, minDenom, maxNumer, maxDenom)(如果沒(méi)有設(shè)置則返回None)

# 實(shí)測(cè)在Windows 7上無(wú)效果

84.wm_attributes(*args)

別名:attributes

返回或設(shè)置窗口各項(xiàng)平臺(tái)特定屬性

無(wú)參數(shù)調(diào)用會(huì)返回平臺(tái)特定屬性和其值的列表

一個(gè)參數(shù)調(diào)用需要參數(shù)是屬性名稱,會(huì)返回它的值

多個(gè)參數(shù)調(diào)用需要是偶數(shù)的參數(shù),每?jī)蓚€(gè)參數(shù)的第一個(gè)是屬性名稱,第二個(gè)是設(shè)置的值

在Windows上的特定屬性如下:

-alpha:窗口的不透明度,值為浮點(diǎn)數(shù),值范圍0.0(完全透明)~1.0(不透明)。如果值超過(guò)范圍則小于0的會(huì)被設(shè)為0.0,大于1的會(huì)被設(shè)為1.0,默認(rèn)值為1.0

-transparentcolor:設(shè)置穿透顏色(透明色),值為顏色,指定空字符串(默認(rèn)值)則不使用

-disabled:窗口是否禁用,值為布爾值,禁用時(shí)無(wú)法在窗口上進(jìn)行任何操作,默認(rèn)值為0

-fullscreen:窗口是否全屏顯示,值為布爾值,默認(rèn)值為0

-toolwindow:窗口是否設(shè)置為工具窗口樣式(窗口標(biāo)題欄只剩關(guān)閉),值為布爾值,默認(rèn)值為0

-topmost:窗口是否頂置,值為布爾值,默認(rèn)值為0


示例:

運(yùn)行結(jié)果:

('-alpha', 1.0, '-transparentcolor', '', '-disabled', 0, '-fullscreen', 0, '-toolwindow', 0, '-topmost', 0)

85.wm_iconify()

# 別名:iconify

將窗口圖標(biāo)化(最小化)

86.wm_deiconify()

# 別名:deiconify

取消窗口圖標(biāo)化,wm_iconify()的逆方法

87.wm_focusmodel(model=None)

# 別名:focusmodel

設(shè)置或獲取焦點(diǎn)模式

'active'為控件將自己索取焦點(diǎn)

'passive'為窗口管理器將給予焦點(diǎn)

默認(rèn)為'passive'。無(wú)參數(shù)調(diào)用返回當(dāng)前焦點(diǎn)模式

88.wm_forget(window)

# 別名:forget

取消窗口window在屏幕上的映射,并wm將不會(huì)管理該窗口

Toplevel窗口不由wm管理時(shí)會(huì)被視為Frame窗口,menu屬性項(xiàng)會(huì)被記住

89.wm_frame()

# 別名:frame

返回窗口的標(biāo)識(shí)符(窗口句柄),是十六進(jìn)制字符串

# 注意要在root.update()后獲取才是目前的窗口句柄


90.wm_geometry(newGeometry=None)

# 別名:geometry

設(shè)置或獲取窗口的geometry string,具體見winfo_geometry()。無(wú)參數(shù)調(diào)用則返回當(dāng)前值

91.wm_iconbitmap(bitmap=None, default=None)

# 別名:iconbitmap

設(shè)置窗口圖標(biāo)為bitmap(.ico文件類型的路徑或其他圖標(biāo)格式)

default——是一個(gè)圖標(biāo)文件路徑,會(huì)將當(dāng)前和后續(xù)所有沒(méi)指定圖標(biāo)的窗口自動(dòng)設(shè)置為此圖標(biāo)文件

# 實(shí)測(cè)default只能指定一次,否則圖標(biāo)將是.exe的圖標(biāo)。如果同時(shí)指定bitmap和default,則只有default生效。指定default之前沒(méi)調(diào)用root.update()且有設(shè)置過(guò)圖標(biāo)會(huì)失效

補(bǔ)充:.ico圖標(biāo)格式??# 摘抄自https://zhuanlan.zhihu.com/p/181586990

.ico是一種圖標(biāo)格式,常見于windows的桌面圖標(biāo)和網(wǎng)址導(dǎo)航欄的小圖標(biāo)。主要特點(diǎn)是一個(gè)ICO文件可以包含多種尺寸圖片

常見的尺寸有16px、24px、32px、48px、64px、96px、128px、192px、256px

win10新增支持更大尺寸512px、768px

需要做全尺寸的推薦256px*256px;不需要的按照使用場(chǎng)景設(shè)計(jì)

補(bǔ)充:標(biāo)準(zhǔn)位圖

對(duì)于bitmap屬性,這些位圖始終可用:

# 圖片來(lái)源:https://tkdocs.com/shipman/bitmaps.html

從左到右依次是:'error', 'gray12', 'gray25', 'gray50', 'gray75', 'hourglass', 'info', 'questhead', 'question', 'warning'

# 不同系統(tǒng)顯示不同

示例:

運(yùn)行結(jié)果:

?

92.wm_iconmask(bitmap=None)

# 別名:iconmask

設(shè)置或獲取位圖掩碼

93.wm_iconname(newName=None)

# 別名:iconname

設(shè)置或獲取當(dāng)窗口圖標(biāo)化時(shí)的圖標(biāo)名稱

94.wm_iconposition(x=None, y=None)

# 別名:iconposition

設(shè)置或獲取當(dāng)窗口圖標(biāo)化時(shí)的圖標(biāo)位置

95.wm_iconwindow(pathName=None)

# 別名:iconwindow

設(shè)置或獲取當(dāng)窗口圖標(biāo)化時(shí)的控件窗口

# pathName是用作圖標(biāo)的窗口,但有的窗口管理器不支持圖標(biāo)窗口概念

96.wm_sizefrom(who=None)

# 別名:sizefrom

設(shè)置或獲取窗口尺寸是由who決定的

who——必須是'user'(用戶)或'program'(系統(tǒng))或它們的縮寫

97.wm_positionfrom(who=None)

# 別名:positionfrom

設(shè)置或獲取窗口位置是由who決定的

who——必須是'user'(用戶)或'program'(系統(tǒng))或它們的縮寫


98.wm_iconphoto(default=False, *args)

# 別名:iconphoto

設(shè)置窗口圖標(biāo),傳入的是PhotoImage類的對(duì)象

default——同wm_iconbitmap()

99.wm_withdraw()

# 別名:withdraw

隱藏窗口,窗口不會(huì)被映射且不在窗口管理器上顯示,可用wm_deiconify()還原

100.wm_state(newstate=None)

# 別名:state

設(shè)置或獲取窗口的狀態(tài):

'normal':正常

'iconic':圖標(biāo)化(最小化)

'withdrawn':被隱藏

'icon':wm_iconwindow()方法中被用作圖標(biāo)

'zoomed':最大化

101.wm_maxsize(width=None, height=None)

# 別名:maxsize

設(shè)置窗口允許被調(diào)整的最大寬度和高度。無(wú)參數(shù)調(diào)用返回當(dāng)前值

102.wm_minsize(width=None, height=None)

# 別名:minsize

設(shè)置窗口允許被調(diào)整的最小寬度和高度。無(wú)參數(shù)調(diào)用返回當(dāng)前值

103.wm_resizable(width=None, height=None)

# 別名:resizable

指示是否可以改變窗口的寬度和高度。值都是布爾值,無(wú)參數(shù)調(diào)用返回當(dāng)前值

104.wm_overrideredirect(boolean=None)

# 別名:overrideredirect

指示窗口管理器是否忽略該窗口,值為布爾值。無(wú)參數(shù)調(diào)用返回當(dāng)前值

# 效果見winfo_containing()的示例

105.wm_title(string=None)

# 別名:title

設(shè)置窗口的標(biāo)題。無(wú)參數(shù)調(diào)用返回當(dāng)前值

106.wm_transient(master=None)

# 別名:transient

指示窗口管理器調(diào)用窗口對(duì)于窗口master是臨時(shí)的。無(wú)參數(shù)調(diào)用返回當(dāng)前值

# 在Windows上的臨時(shí)窗口只有關(guān)閉按鈕

示例:

運(yùn)行結(jié)果:

# 窗口大小進(jìn)行過(guò)手動(dòng)拉伸

?


wm_protocol(ame=None, func=None)

# 別名:protocol

啟動(dòng)協(xié)議處理機(jī)制,name是協(xié)議名,func是回調(diào)函數(shù)

# 如果只傳入?yún)f(xié)議名,則返回協(xié)議名對(duì)應(yīng)的回調(diào)函數(shù)名:[一串?dāng)?shù)字][函數(shù)名]

# 無(wú)參數(shù)調(diào)用返回窗口所有協(xié)議的列表

最常用的協(xié)議是WM_DELETE_WINDOW:當(dāng)用戶點(diǎn)擊窗口的關(guān)閉按鈕時(shí)調(diào)用回調(diào)函數(shù)

# 其他協(xié)議見客戶間通信協(xié)定手冊(cè)(ICCCM)


七、標(biāo)簽控件(Label)

(1)、概念

標(biāo)簽控件主要用來(lái)顯示窗口中的文本或者圖像

(2)、演示圖

# 此部分不給出代碼,用于對(duì)控件有大體認(rèn)識(shí)

(3)、構(gòu)造方法

tkinter.Label(master=None, cnf={}, **kw)

master——指定父控件

cnf——將屬性名稱映射到值的字典

kw——使用關(guān)鍵字設(shè)置屬性

# 后文將不再對(duì)master、cnf和構(gòu)造方法里的kw做解釋

補(bǔ)充:Label控件的背景構(gòu)成 ?# 摘編自C語(yǔ)言中文網(wǎng)

Label控件背景由三部分構(gòu)成內(nèi)容區(qū)、填充區(qū)和邊框,三個(gè)區(qū)域分別可用以下控件屬性控制:

width/height

padx/pady

borderwidth

如下圖所示:

# 圖片來(lái)源:C語(yǔ)言中文網(wǎng)

(4)、屬性項(xiàng)

activebackground, activeforeground, anchor, background, bd, bg, bitmap, borderwidth, compound, cursor, disabledforeground, fg, font, foreground, height, highlightbackground, highlightcolor, highlightthickness, image, justify, padx, pady, relief, state, takefocus, text, textvariable, underline, width, wraplength

1.anchor

文本(或圖像)在Label中(內(nèi)容區(qū))顯示的位置,值必須是'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'或'center'。默認(rèn)值為'center'

2.text

指定顯示在控件上的一行或多行文本,是一個(gè)字符串,使用'\n'換行

3.bitmap

指定顯示在控件上的位圖

# 位圖見“補(bǔ)充:標(biāo)準(zhǔn)位圖”

4.image

指定顯示在控件上的圖像,是一個(gè)圖像對(duì)象(PhotoImage、BitmapImage類的對(duì)象)

# 實(shí)測(cè)如果同時(shí)指定text, bitmap, image,它們的優(yōu)先級(jí)(從高到低)是image, bitmap, text

補(bǔ)充:圖像

下面是兩種在Tkinter中顯示圖像的方式:

1.使用位圖BitmapImage類,需要是.xbm格式,這種方式不過(guò)多介紹

2.使用全彩圖像PhotoImage類,需要是.gif, .pgm, .ppm, .png格式

構(gòu)造方法是:tkinter.PhotoImage(file=文件路徑)

# 注意,如果圖像實(shí)例沒(méi)有(動(dòng)態(tài))賦值給現(xiàn)有變量,圖像將不會(huì)顯示。另外注意函數(shù)中局部變量離開函數(shù)的生命周期后會(huì)被垃圾回收機(jī)制回收,所以建議動(dòng)態(tài)賦值圖像實(shí)例或?qū)⑵浔4鏋槌A?/span>

# 圖像類的方法和具體內(nèi)容見后文章節(jié)“圖像”

5.compound

當(dāng)文本和圖像同時(shí)顯示時(shí),指定圖像位于文本的方位。值可以是'top', 'bottom', 'left', 'right', 'center', 'none'(或它們的縮寫)。默認(rèn)值為'none'

# 實(shí)測(cè)只有值為'center'時(shí)文本才包含在圖像里

示例:

運(yùn)行結(jié)果:

6.state

改變控件的狀態(tài),在不同控件中效果不同,值可以是'normal'(默認(rèn)值), 'active', 'disabled'(或它們的縮寫)

下為L(zhǎng)able控件的實(shí)測(cè):

'active':文本的背景色和前景色變?yōu)閍ctivebackground, activeforeground

'disabled':文本變?yōu)闇\灰色,圖像呈棋盤狀

7.foregroundfg

設(shè)置前景色:如果顯示的是文本,則指定文本的顏色;如果顯示的是位圖,則指定位圖中比特位為1的顏色。默認(rèn)值由系統(tǒng)指定

8.activebackground, activeforeground

設(shè)置當(dāng)控件狀態(tài)為'active'時(shí)顯示的背景色和前景色

9.disabledforeground

設(shè)置當(dāng)控件狀態(tài)為'disabled'時(shí)顯示的前景色

10.font

指定文本的字體

補(bǔ)充:字體

下面是兩種在Tkinter中設(shè)置字體的方式:

一、使用字符串或元組:(字體, 大小, 樣式, 樣式, ...)

# 使用字符串相當(dāng)于''.join(元組)

大小——如果是正數(shù),則以點(diǎn)數(shù)為單位;如果是負(fù)數(shù),則以像素為單位

樣式——是一個(gè)字符串,可包含一個(gè)或多個(gè)樣式(用空格分隔),樣式分別是:

字體粗細(xì)(二選一):'normal'(普通,默認(rèn)值), 'bold'(加粗)

字體斜度(二選一):'roman'(羅馬,默認(rèn)值), 'italic'(傾斜)

其他樣式:'underline'(下劃線), 'overstrike'(刪除線)

二、使用tkinter.font模塊

使用其中的Font類創(chuàng)建字體對(duì)象:

Font(root=None, font=None, name=None, exists=False, **options)

root——主窗口

font——指定字體,使用方法同1

name——字體對(duì)象的名稱,默認(rèn)值是'fontN',N是第幾個(gè)字體對(duì)象,名稱唯一

exists——name指定的字體對(duì)象名稱是否已經(jīng)存在。如果為False,則在name指定的字體對(duì)象名稱不存在時(shí)創(chuàng)建一個(gè)新的字體對(duì)象,否則拋出TclError;如果為True,則在name指定的字體對(duì)象名稱存在時(shí)指向現(xiàn)有的字體對(duì)象,否則拋出TclError

options——屬性項(xiàng),如果font被指定了則會(huì)被忽略,下面是屬性項(xiàng):

family:字體

size:大小,單位是點(diǎn)數(shù)

weight:字體粗細(xì),'normal', 'bold'

slant:字體斜度,'roman', 'italic'

underline:下劃線,布爾值

overstrike:刪除線,布爾值

# 實(shí)測(cè)默認(rèn)值為:{'family': '宋體', 'size': 12, 'weight': 'normal', 'slant': 'roman', 'underline': 0, 'overstrike': 0},不同環(huán)境上的默認(rèn)值應(yīng)該不同

# 文本控件不設(shè)置font屬性的默認(rèn)值為'TkDefaultFont',具體見后

下面是Font類的方法:

1.actual(option=None, displayof=None)

返回字體對(duì)象的實(shí)際屬性項(xiàng)值

option——屬性項(xiàng)名,未給出則返回所有屬性與實(shí)際值組成的字典。否則返回給定屬性項(xiàng)的值

displayof——指定顯示器

2.cget(option)

返回字體對(duì)象option屬性項(xiàng)的值

# 這里的值是傳入值而不是實(shí)際值

3.config(**options)

# 別名configure

修改字體對(duì)象的屬性項(xiàng)值

4.copy()

返回字體對(duì)象的獨(dú)立副本

# 這是將字體對(duì)象的實(shí)際屬性項(xiàng)值傳入構(gòu)造方法得到的

5.measure(text, displayof=None)

返回將字體應(yīng)用到text后的寬度,單位是像素

displayof——指定顯示器

6.metrics(*options, **kw)

返回字體對(duì)象的font metrics(字體規(guī)格/字體度量)

# 關(guān)于font metrics,請(qǐng)查閱網(wǎng)絡(luò)

下面是tkinter.font模塊的常量:

NORMAL, ROMAN, BOLD, ITALIC

下面是tkinter.font模塊的函數(shù):

1.families(root=None, displayof=None)

以元組形式返回所有支持的字體

2.nametofont(name)

返回名為name的Font實(shí)例

# 在Python 3.10版添加了root形參:nametofont(name, root=None)

3.names(root=None)

以元組形式返回所有定義的字體

示例:

運(yùn)行結(jié)果:

{'family': '微軟雅黑', 'size': 15, 'weight': 'bold', 'slant': 'roman', 'underline': 1, 'overstrike': 0}

122

{'ascent': 21, 'descent': 6, 'linespace': 27, 'fixed': 0}

?

補(bǔ)充:標(biāo)準(zhǔn)字體

TkDefaultFont:所有GUI項(xiàng)目的默認(rèn)字體

TkTextFont:用于Enter、Listbox等控件

TkFixedFont:一種標(biāo)準(zhǔn)的固定寬度的字體

TkMenuFont:用于菜單項(xiàng)的字體

TkHeadingFont:用于列表和表格標(biāo)題的字體

TkCaptionFont:用于窗口和對(duì)話框標(biāo)題欄的字體

TkSmallCaptionFont:用于子窗口或工具對(duì)話框的字體

TkIconFont:用于圖標(biāo)標(biāo)題(icon captions)的字體

TkTooltipFont:用于工具提示(移動(dòng)到控件之上顯示控件功能)的字體

# 標(biāo)準(zhǔn)字體具體屬性項(xiàng)值可使用nametofont()獲取對(duì)應(yīng)Font實(shí)例

11.justify

指定多行文本的對(duì)齊方式。值為'left', 'center'(默認(rèn)值), 'right'(或它們的縮寫)

12.padx, pady

指定控件左右兩邊提供的額外空間(控件邊框與內(nèi)容的間距),分別是水平和垂直,默認(rèn)值都為1,單位是像素

此屬性與布局方法中padx, pady屬性的區(qū)別是控件屬性padx, pady指定的是內(nèi)邊距。此屬性與布局方法中ipadx, ipady屬性的區(qū)別是,有些控件(例如框架控件Frame)如果其中沒(méi)有內(nèi)容或顯示的是位圖或圖像時(shí),控件屬性padx, pady會(huì)省略而布局方法ipadx, ipady不會(huì)省略

13.textvariable

值為一個(gè)StringVar類的控制變量,設(shè)置后控件顯示的文本是這個(gè)控制變量的值

# 關(guān)于控制變量參見下一章

14.underline

給指定的字符添加下劃線,默認(rèn)值-1表示不添加,值為整數(shù),從0開始

# 實(shí)測(cè)如果文本(文本大小足夠大)已有下劃線,再用這個(gè)加下劃線會(huì)使指定字符的下劃線加粗

15.wraplength

指定每行的字符數(shù),單位是像素。默認(rèn)值為0,意味著只有在'\n'時(shí)才換行

# 默認(rèn)值不為0時(shí)在'\n'時(shí)也會(huì)換行


示例:

運(yùn)行結(jié)果:

示例2:

# 控件屬性padx, pady和布局屬性padx, pady, ipadx, ipady的區(qū)別

使用的圖片:

green.png:

程序:

運(yùn)行結(jié)果:

# 最左邊標(biāo)簽控件因?yàn)槭菆D片,省略額外空間padx, pady

# 中間控件和最右邊控件分別用布局屬性設(shè)置外邊距和內(nèi)邊距

(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)

background, bg:默認(rèn)值由系統(tǒng)指定

borderwidth, bd:默認(rèn)值為2

cursor:默認(rèn)值為空字符串 ?# 空字符串代表系統(tǒng)默認(rèn)或沒(méi)指定

width, height:字符為單位,默認(rèn)值都為0(根據(jù)文本大小自動(dòng)選擇適合的大?。?/span>

# 注意如果Label是圖像則以像素為單位

relief:默認(rèn)值為'flat'


八、控制變量/動(dòng)態(tài)類型(Control variables)

# 此章參考:

https://tkdocs.com/shipman/control-variables.html

http://c.biancheng.net/tkinter/entry-widget.html

(1)、概念

GUI編程中,有時(shí)需要“動(dòng)態(tài)跟蹤”一些變量值的變換,從而保證值的變換及時(shí)地反映到顯示界面上,但Python內(nèi)置的數(shù)據(jù)類型無(wú)法做到這一目的,就需要使用Tcl內(nèi)置的對(duì)象——控制變量(動(dòng)態(tài)類型/Tcl變量)

?

控制變量的一個(gè)特殊性質(zhì)就是可以被不同的控件共享且記住所有共享它的控件

(2)、創(chuàng)建

# 下面三個(gè)都是繼承自Variable類

字符串控制變量:

StringVar(master=None, value=None, name=None)

整數(shù)控制變量:

IntVar(master=None, value=None, name=None)

浮點(diǎn)數(shù)控制變量:

DoubleVar(master=None, value=None, name=None)

布爾值控制變量:

BooleanVar(master=None, value=None, name=None)

master——指定父控件

value——指定值,默認(rèn)值分別為'', 0, 0.0, False

name——指定名稱,默認(rèn)值為PY_VARnum(num是第幾個(gè)控制變量)。如果name和現(xiàn)有的控制變量重名,則會(huì)覆蓋原有的控制變量

(3)、方法

# 以下“變量”指“控制變量”

# 'trace_v...()'的方法和trace()方法是被廢棄的

1.get()

返回變量的當(dāng)前值

2.set(value)

# 別名:initialize

改變變量的當(dāng)前值value。共享此變量的控件會(huì)在主循環(huán)下次空閑時(shí)被更新

補(bǔ)充:使用主窗口的getvar()和setvar()方法也可以獲取或改變變量的值

3.trace_add(mode, callback)

為變量綁定一個(gè)回調(diào)函數(shù),檢測(cè)到mode操作時(shí)調(diào)用回調(diào)函數(shù)

mode——值為'read'(讀?。? 'write'(寫入), 'unset'(刪除),或者是包含它們的列表、元組和字符串

callback——回調(diào)函數(shù)。被回調(diào)時(shí)會(huì)被傳遞三個(gè)參數(shù):(變量名/數(shù)組名稱, 數(shù)組索引, 操作)

# 實(shí)際上mode的值還有'array',這里不詳細(xì)說(shuō)明

返回值是回調(diào)函數(shù)的名稱:[一串?dāng)?shù)字][函數(shù)名]

4.trace_remove(mode, cbname)

刪除變量的一個(gè)回調(diào)函數(shù)

mode——必須與trace_add()中指定的值相同

abname——trace_add()中返回的回調(diào)函數(shù)的名稱


5.trace_info()

返回當(dāng)前設(shè)置在變量上的所有回調(diào)函數(shù)的信息:

[((模式, 模式, ...), 回調(diào)函數(shù)名稱), ((模式, 模式, ...), 回調(diào)函數(shù)名稱), ...]

示例:


運(yùn)行結(jié)果:

[(('read', 'write'), '1913088callback')]

width被讀取

height被讀取

width被寫入

...

輸入前:

輸入后:


九、框架控件(Frame)

(1)、概念

框架控件是一個(gè)矩形窗體,是其他控件的一個(gè)容器,有助于組織用戶界面

每個(gè)框架控件都有自己的布局(pack, grid或place),之間互不干擾

# 實(shí)際上根窗口基本上就是一個(gè)框架

(2)、演示圖

(3)、構(gòu)造方法

tkinter.Frame(master=None, cnf={}, **kw)

(4)、屬性項(xiàng)

bd, borderwidth, class, relief, background, bg, colormap, container, cursor, height, highlightbackground, highlightcolor, highlightthickness, padx, pady, takefocus, visual, width

# container屬性項(xiàng)見頂級(jí)窗口控件

補(bǔ)充:使用布局管理器的in(in_)屬性使其他控件放置在框架容器中

(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)

borderwidth, bd:默認(rèn)值都為0

relief:默認(rèn)值為'flat'

background, bg:默認(rèn)值由系統(tǒng)指定

cursor:默認(rèn)值為空字符串

width, height:默認(rèn)值都為0

highlightthickness:默認(rèn)值為0

highlightcolor, highlightbackground:默認(rèn)值由系統(tǒng)指定

# 注意因?yàn)閠akefocus的默認(rèn)值為0,控件不能獲得焦點(diǎn)。所以只有當(dāng)takefocus為1時(shí),highlightcolor和highlightbackground才起作用

padx, pady:默認(rèn)值都為0

takefocus:默認(rèn)值為0


示例:

運(yùn)行結(jié)果:

# pack默認(rèn)居中,grid默認(rèn)左上(0, 0)


十、標(biāo)簽框架控件(LabelFrame)

(1)、概念

屬于框架控件的變體,與框架控件不同的是會(huì)在包裹的子控件周圍繪制一個(gè)邊框和一個(gè)標(biāo)簽

當(dāng)想要將一些相關(guān)的控件分為一組時(shí)可以使用此控件

(2)、演示圖

(3)、構(gòu)造方法

tkinter.LabelFrame(master=None, cnf={}, **kw)

(4)、屬性項(xiàng)

bd, borderwidth, class, fg, font, foreground, labelanchor, labelwidget, relief, text, background, bg, colormap, container, cursor, height, highlightbackground, highlightcolor, highlightthickness, padx, pady, takefocus, visual, width

1.labelanchor

指定控件邊框上標(biāo)簽的位置,默認(rèn)位置為'nw'(頂部的左端)

可選值有:'e', 'en', 'es', 'n', 'ne', 'nw', 's', 'se', 'sw', 'w', 'wn'或'ws'

具體位置請(qǐng)見下圖:

圖片來(lái)源:https://tkdocs.com/shipman/labelframe.html

# 注意'nw'與'wn'的位置不同,其他值同樣

2.labelwidget

使用另一個(gè)控件代替標(biāo)簽

如果同時(shí)傳入labelwidget和text屬性,則text的值將被忽略

(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)

borderwidth, bd:默認(rèn)值為2

foreground, fg:默認(rèn)值由系統(tǒng)指定

# 前景色和后面的字體等都是對(duì)邊框周圍的標(biāo)簽作用的

font:默認(rèn)值為'TkDefaultFont'

relief:默認(rèn)值為'groove'

text:默認(rèn)值為空字符串

background, bg:默認(rèn)值由系統(tǒng)指定

container:默認(rèn)值為0

cursor:默認(rèn)值為空字符串

width, height:默認(rèn)值都為0

highlightthickness:默認(rèn)值為0

highlightcolor, highlightbackground:默認(rèn)值由系統(tǒng)指定

padx, pady:默認(rèn)值都為0

takefocus:默認(rèn)值為0

示例:

運(yùn)行結(jié)果:





Python Tk GUI系列筆記(tkinter篇(初)) 第一章~第十章的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
区。| 哈尔滨市| 柘荣县| 喀喇沁旗| 吉水县| 太和县| 东乌珠穆沁旗| 丽江市| 外汇| 彝良县| 新竹县| 苍溪县| 永吉县| 大荔县| 河间市| 赤壁市| 金阳县| 牟定县| 云龙县| 阳东县| 潮安县| 米易县| 若羌县| 林西县| 祁门县| 江北区| 鲜城| 陆川县| 平谷区| 福贡县| 苗栗县| 巨鹿县| 茂名市| 大洼县| 岑溪市| 常宁市| 大姚县| 青川县| 娄底市| 印江| 虹口区|