tkinter.ttk --- Tk主題小部件?

源代碼: Lib/tkinter/ttk.py


tkinter.ttk 模塊自 Tk 8.5 開始引入,可用于訪問 Tk 風格的控件包。如果 Python 未基于 Tk 8.5 編譯,只要安裝了 Tile 仍可訪問本模塊。前一種采用 Tk 8.5 的方式帶有更多好處,比如在 X11 系統下支持反鋸齒字體渲染和透明窗口(需要 X11 中的窗口組管理器)。

tkinter.ttk 的基本設計思路,就是盡可能地把控件的行為代碼與實現其外觀的代碼分離開來。

參見

Tk 控件風格

一份文檔介紹Tk支持的主題

使用 Ttk?

開始使用 Ttk, 導入模塊:

from tkinter import ttk

重寫基礎Tk部件,導入應跟隨Tk導入:

from tkinter import *
from tkinter.ttk import *

這段代碼會讓以下幾個 tkinter. ttk 控件(Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, ScaleScrollbar)自動替換掉 Tk 的對應控件。

使用新控件的直接好處,是擁有更好的跨平臺的外觀,但新舊控件并不完全兼容。主要區別在于,Ttk 組件不再包含“fg”、“bg”等與樣式相關的參數 。而是用 ttk.Style 類來定義更美觀的樣式效果。

參見

將現有的應用程序轉換為 Tile 控件,可參考 Converting existing applications to use Tile widgets

此文介紹使用新控件時的常見差別(使用 Tcl )。

Ttk 部件?

ttk 中有 18 種部件 ,其中十二種已存在于 tkinter 中: Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale, Scrollbar 以及 Spinbox。 另外六種是新增的: Combobox, Notebook, Progressbar, Separator, Sizegrip 以及 Treeview。 它們全都是 Widget 的子類。

ttk 控件可以改善應用程序的外觀。如上所述,修改樣式的代碼與 tk 控件存在差異。

Tk 代碼:

l1 = tkinter.Label(text="Test", fg="black", bg="white")
l2 = tkinter.Label(text="Test", fg="black", bg="white")

Ttk 代碼:

style = ttk.Style()
style.configure("BW.TLabel", foreground="black", background="white")

l1 = ttk.Label(text="Test", style="BW.TLabel")
l2 = ttk.Label(text="Test", style="BW.TLabel")

有關 TtkStyling 的更多信息,請參閱 Style 類文檔。

控件?

ttk.Widget 定義了 Tk 主題小部件支持的標準選項和方法,不應該直接實例化。

標準選項?

所有 ttk 小部件接受以下選項:

選項

描述

class -- 類

指定窗口類。在查詢選項數據庫中窗口的其他選項時,使用該類,確定窗口的默認綁定標簽,以及選擇窗口小部件的默認布局和樣式。此選項僅為只讀,并且只能在創建窗口時指定。

cursor

指定要用于窗口小部件的鼠標光標。如果設置為空字符串(默認值),則為父窗口小部件繼承光標.

takefocus

確定窗口是否在鍵盤遍歷期間接受焦點。返回0或1,返回空字符串。如果返回0,則表示在鍵盤遍歷期間應該跳過該窗口。如果為1,則表示只要可以查看窗口就應該接收輸入焦點。并且空字符串意味著遍歷腳本決定是否關注窗口。

style

可用于指定自定義窗口小部件樣式。

可滾動控件選項?

控件支持以下選項使用滾動條控制.

選項

描述

xscroll命令

用于與垂直滾動條通訊.

當視圖在部件窗口改變,部件將會基于scroll命令生成Tcl命令.

通常該參數由滾動條的 Scrollbar.set() 方法組成。當窗口中的可見內容發生變化時,將會刷新滾動條的狀態。

yscroll命令

用于與垂直滾動條通訊.更多信息請參考上面的信息.

標簽選項?

以下選項支持標簽,按鈕已經其他類按鈕的控件.

選項

描述

文本

指定顯示在控件內的文本。

文本變量

指定一個變量名,其值將用于設置 text 參數。

下劃線

設置文本字符串中帶下劃線字符的索引(基于0)。下劃線字符用于激活快捷鍵。

圖片

指定一個用于顯示的圖像。這是一個由1個或多個元素組成的列表。第一個元素是默認的圖像名稱。列表的其余部分是由 Style.map() 定義的“狀態/值對”的序列,指定控件在某狀態或狀態組合時要采用的圖像。列表中的所有圖像應具備相同的尺寸。

compound

指定同時存在 text 和 image 參數時,應如何顯示文本和對應的圖片。合法的值包括:

  • text: 只顯示文本

  • image: 只顯示圖片

  • top, bottom, left, right: 分別顯示圖片的上,下,左,右的文本.

  • none: 默認. 如果設置顯示圖片, 否則文本.

寬度

如果值大于零,指定文本標簽留下多少空間,單位是字符數;如果值小于零,則指定最小寬度。如果等于零或未指定,則使用文本標簽本身的寬度。

兼容性選項?

選項

描述

狀況

可以設為“normal”或“disabled”,以便控制“禁用”狀態標志位。本參數只允許寫入:用以改變控件的狀態,但 Widget.state() 方法不影響本參數。

控件狀態?

控件狀態是無關狀態標志的位圖.

標志

描述

活動

鼠標光標經過控件并按下鼠標按鈕,將引發動作。

禁用

在程序控制下控件是禁用的

焦點

控件有鍵盤焦點

按壓

控件已被按下。

選擇

勾選或單選框之類的控件,表示啟用、選中狀態。

背景

Windows 和 Mac 系統的窗口具有“激活”或后臺的概念。后臺窗口的控件會設置 foreground 參數,而前臺窗口的控件則會清除此狀態。

只讀

控件不允許用戶修改。

alternate

控件的備選顯式格式。

無效的

控件的值是無效的

所謂的控件狀態,就是一串狀態名稱的組合,可在某個名稱前加上感嘆號,表示該狀態位是關閉的。

ttk.Widget?

除了以下方法之外,ttk.Widget 還支持 tkinter.Widget.cget()tkinter.Widget.configure() 方法。

class tkinter.ttk.Widget?
identify(x, y)?

返回位于 x y 的控件名稱,如果該坐標點不屬于任何控件,則返回空字符串。

xy 是控件內的相對坐標,單位是像素。

instate(statespec, callback=None, *args, **kw)?

檢測控件的狀態。如果沒有設置回調函數,那么當控件狀態符合 statespec 時返回 True,否則返回 False。如果指定了回調函數,那么當控件狀態匹配 statespec 時將會調用回調函數,且帶上參數 args。

state(statespec=None)?

修改或查詢控件的狀態。如果給出了 statespec,則會設置控件的狀態,并返回一個新的*statespec*,表明哪些標志做過改動。如果未給出 statespec,則返回當前啟用的狀態標志。

statespec 通常是列表或元組類型。

組合框?

ttk.Combobox 控件是文本框和下拉列表的組合體。該控件是 Entry 的子類。

除了從 Widget 繼承的 Widget.cget()Widget.configure()Widget.identify()Widget.instate()Widget.state() 方法,以及從 Entry 繼承的 Entry.bbox()Entry.delete()Entry.icursor()Entry.index()Entry.insert()Entry.selection()Entry.xview() 方法,ttk.Combobox 還自帶了其他幾個方法。

選項?

控件可設置以下參數:

選項

描述

exportselection

布爾值,如果設為 True,則控件的選中文字將關聯為窗口管理器的選中文字(可由 Misc.selection_get 返回)。

justify

指定文本在控件中的對齊方式。可為 left、center、right 之一。

height

設置下拉列表框的高度。

postcommand

一條代碼,(可用 Misc.register 進行注冊),在顯示之前將被調用。可用于選取要顯示的值。

狀況

normal 、readonly 或 disabled。在 readonly 狀態下,數據不能直接編輯,用戶只能從下拉列表中選取。在 normal 狀態下,可直接編輯文本框。在 disabled 狀態下,無法做任何交互。

文本變量

設置一個變量名,其值與控件的值關聯。每當該變量對應的值發生變動時,控件值就會更新,反之亦然。參見 tkinter.StringVar

設置顯示于下拉列表中的值。

寬度

設置為整數值,表示輸入窗口的應有寬度,單位是字符單位(控件字體的平均字符寬度)。

虛擬事件?

當用戶從下拉列表中選擇某個元素時,控件會生成一條 <<ComboboxSelected>> 虛擬事件。

ttk.Combobox?

class tkinter.ttk.Combobox?
current(newindex=None)?

如果給出了 newindex,則把控件值設為 newindex 位置的元素值。否則,返回當前值的索引,當前值未在列表中則返回 -1。

get()?

返回控件的當前值。

set(value)?

設置控件的值為 value

Spinbox?

ttk.Spinbox 控件是 ttk.Entry 的擴展,帶有增減箭頭。可用于數字或字符串列表。這是 Entry 的子類。

除了從 Widget 繼承的 Widget.cget()Widget.configure()Widget.identified()Widget.instate()Widget.state() 方法,以及從 Entry 繼承的 Entry. bbox()Entry.delete()Entry.icursor()Entry.index()Entry.insert()Entry.xview() 方法,控件還自帶了其他一些方法,在 ttk.Spinbox 中都有介紹。

選項?

控件可設置以下參數:

選項

描述

浮點值。即遞減按鈕要遞減的最小值。作為參數使用時必須寫成 from_,因為 from 是 Python 關鍵字。

浮點值。即遞增按鈕能夠到達的最大值。

增加

浮點值。指定遞增/遞減按鈕每次的修改量。默認值為 1.0。

字符串或浮點值構成的序列。如若給出,則遞增/遞減會在此序列元素間循環,而不是增減數值。

wrap

布爾值。若為 True ,則遞增和遞減按鈕會由 to 值循環至 from 值,或由 from 值循環至 to 值。

格式

字符串。指定遞增/遞減按鈕的數字格式。必須以“%W.Pf”的格式給出,W 是填充的寬度,P 是小數精度,% 和 f 就是本身的含義。

命令

Python 回調函數。只要遞增或遞減按鈕按下之后,就會進行不帶參數的調用。

虛擬事件?

用戶若按下 <Up> ,則控件會生成 <<Increment>> 虛擬事件,若按下 <Down> 則會生成 <<Decrement>> 事件。

ttk.Spinbox?

class tkinter.ttk.Spinbox?
get()?

返回spinbox當前值

set(value)?

設置spinbox的值為*value*.

筆記本?

Ttk Notebook 控件管理著多個窗口的集合,每次顯示其中的一個。每個子窗口都與某個 tab 關聯,可供用戶選中以改變當前顯示的窗口。

選項?

控件可設置以下參數:

選項

描述

height

如若給出且大于 0,則指定子窗口面板的應有高度(不含內部縮進)。否則會采用所有子窗口面板的最大高度。

padding

指定在控件外部添加的留白。padding 是最多包含四個值的列表,指定左頂右底的空間。如果給出的元素少于四個,底部值默認為頂部值,右側值默認為左側值,頂部值默認為左側值。

寬度

若給出且大于 0,則設置面板的應有寬度(不含內部 padding)。否則將采用所有子窗口面板的最大寬度。

Tab 選項?

Tab 特有屬性如下:

選項

描述

狀況

可為 normal、disabled 或 disabled 之一。若為 disabled 則不能選中。若為 hidden 則不會顯示。

sticky

指定子窗口在面板內的定位方式。應為包含零個或多個 n、s、e 、w 字符的字符串。每個字母表示子窗口應緊靠的方向(北、南、東或西),正如 grid() 位置管理器所述。

padding

指定控件和面板之間的留白空間。格式與本控件的 padding 屬性相同。

文本

指定顯示在 tab 上的文本。

圖片

指定顯示在 tab 上的圖片。參見 Widget 的 image 屬性。

compound

當文本和圖片同時存在時,指定圖片相對于文本的顯示位置。合法的屬性值參見 Label Options

下劃線

指定下劃線在文本字符串中的索引(基于0)。如果調用過了 Notebook.enable_traversal(),帶下劃線的字符將用于激活快捷鍵。

Tab 標識?

The tab_id present in several methods of ttk.Notebook may take any of the following forms:

  • 位于 0 和 tab 總數之間的整數值。

  • 子窗口的名稱

  • 以“@x,y”形式給出的位置,唯一標識了 tab 頁。

  • 字符串“current”,標識當前選中的 Tab。

  • 字符串字面值 "end",它返回標簽頁的數量 (僅適用于 Notebook.index())

虛擬事件?

當選中一個新 tab 頁之后,控件會生成一條 <<NotebookTabChanged>> 虛擬事件。

ttk.Notebook?

class tkinter.ttk.Notebook?
add(child, **kw)?

添加一個新 tab 頁。

如果窗口是由 Notebook 管理但處于隱藏狀態,則會恢復到之前的位置。

可用屬性請參見 Tab Options

forget(tab_id)?

刪除 tab_id 指定的 tab 頁,移除與其窗口的關聯。

hide(tab_id)?

隱藏 tab_id 指定的 tab 頁。

tab 頁不會顯示出來,但關聯的窗口仍接受 Notebook 的管理,其配置屬性會繼續保留。隱藏的 tab 頁可由 add() 恢復。

identify(x, y)?

返回 tab 頁內位置為 xy 的控件名稱,若不存在則返回空字符串。

index(tab_id)?

返回 tab_id 指定 tab 頁的索引值,如果 tab_id 為 end 則返回 tab 頁的總數。

insert(pos, child, **kw)?

在指定位置插入一個面板控件。

pos 可為字符串“end” 、整數索引值或子窗口名稱。如果 child 已由 Notebook 管理,則移至指定位置。

可用屬性請參見 Tab Options

select(tab_id=None)?

選中 tab_id 指定 tab。

顯示關聯的子窗口,之前選中的窗口將取消映射關系。如果省略 tab_id ,則返回當前選中面板的控件名稱。

tab(tab_id, option=None, **kw)?

查詢或修改 tab_id 指定 tab 的屬性。

如果未給出 kw ,則返回由 tab 屬性組成的字典。如果指定了 option,則返回其值。否則,設置屬性值。

tabs()?

返回 Notebook 管理的窗口列表。

enable_traversal()?

為包含 Notebook 的頂層窗口啟用鍵盤遍歷。

這將為包含 Notebook 的頂層窗口增加如下鍵盤綁定關系:

  • Control-Tab :將當前 tab 加入選中列表。

  • Shift-Control-Tab :選中當前 tab 之前的頁。

  • Alt-K :這里 K 是任意 tab 頁的快捷鍵(帶下劃線)字符,將會直接選中該 tab。

一個頂層窗口中可為多個 Notebook 啟用鍵盤遍歷,包括嵌套的 Notebook 。但僅當所有面板都將所在 Notebook 作為父控件時,鍵盤遍歷才會生效。

Progressbar?

ttk.Progressbar 控件可為長時間操作顯示狀態。可工作于兩種模式:1)確定模式,顯示相對完成進度;2)不確定模式,顯示動畫讓用戶知道工作正在進行中。

選項?

控件可設置以下參數:

選項

描述

orient

horizontal 或 vertical。指定進度條的顯示方向。

length

指定進度條長軸的長度(橫向為寬度,縱向則為高度)。

模式

determinate 或 indeterminate。

maximum

設定最大值。默認為 100。

進度條的當前值。在 determinate 模式下代表已完成的工作量。在 indeterminate 模式下,解釋為 maximum 的模;也就是說,當本值增至 maximum 時,進度條完成了一個“周期”。

variable

與屬性值關聯的變量名。若給出,則當變量值變化時會自動設為進度條的值。

phase

只讀屬性。只要值大于 0 且在 determinate 模式下小于最大值,控件就會定期增大該屬性值。當前主題可利用本屬性提供額外的動畫效果。

ttk.Progressbar?

class tkinter.ttk.Progressbar?
start(interval=None)?

啟動自動遞增模式:安排一個循環的定時器事件,每隔 interval 毫秒調用一次 Progressbar.step()interval 可省略,默認為 50毫秒。

step(amount=None)?

將進度條的值增加 amount

amount 可省略,默認為 1.0。

stop()?

停止自增模式:取消所有由 Progressbar.start() 啟動的循環定時器事件。

Separator?

The ttk.Separator widget displays a horizontal or vertical separator bar.

除由 ttk.Widget 繼承而來的方法外,沒有定義其他方法。

選項?

屬性如下:

選項

描述

orient

horizontal 或 vertical。指定分隔條的方向。

Sizegrip?

ttk.Sizegrip 控件允許用戶通過按下并拖動控制柄來調整內部頂層窗口的大小。

除由 ttk.Widget 繼承的之外,沒有其他屬性和方法。

與平臺相關的注意事項?

  • 在 MacOS X 中,頂層窗口自動內置了大小控制柄。再加一個 Sizegrip 也沒什么壞處,因為內置的控制柄會蓋住 Sizegrip 控件。

Bug?

  • 假如內部的頂層窗口位置是相對于屏幕的右側或底部進行設置的,那么 Sizegrip 控件將不會改變窗口的大小。

  • 僅支持東南方向的縮放。

Treeview?

ttk.Treeview 控件可將多項內容分層級顯示。每個數據項抖帶有一個文本標簽、一張圖片(可選)和一個數據列表(可選)。這些數據值將在樹標簽后面分列顯示。

數據值的顯示順序可用屬性 displaycolumns 進行控制。樹控件還可以顯示列標題。數據列可通過數字或名稱進行訪問,各列的名稱在屬性 columns 中列出。參閱 Column Identifiers

每個數據項都由唯一名稱進行標識。如果調用者未提供數據項的 ID,樹控件會自動生成。根有且只有一個,名為 {}。根本身不會顯示出來;其子項將顯示在頂層。

每個數據項均帶有 tag 列表,可用于綁定事件及控制外觀。

Treeview 組件支持水平和垂直滾動,滾動時會依據 Scrollable Widget Options 描述的屬性和 Treeview.xview()Treeview.yview() 方法。

選項?

控件可設置以下參數:

選項

描述

columns

列標識的列表,指定列的數量和名稱。

displaycolumns

列標識的列表(索引可為符號或整數),指定要顯示的數據列及顯示順序,或者字符串 “#all”。

height

指定可見的行數。注意:所需寬度由各列寬度之和決定。

padding

指定控件內部的留白。為不超過四個元素的長度列表。

selectmode

控制內部類如何進行選中項的管理。可為 extended、browse 或 none。若設為 extended(默認),則可選中多個項。若為 browse ,則每次只能選中一項。若為 none,則無法修改選中項。

請注意,代碼和 tag 綁定可自由進行選中操作,不受本屬性的限制。

show

由0個或下列值組成的列表,指定要顯示樹的哪些元素。

  • tree :在 #0 列顯示樹的文本標簽。

  • headings :顯示標題行。

默認為“tree headings”,顯示所有元素。

** 注意** :第 #0 列一定是指 tree 列,即便未設置 show="tree" 也一樣。

數據項的屬性?

可在插入和數據項操作時設置以下屬性。

選項

描述

文本

用于顯示的文本標簽。

圖片

Tk 圖片對象,顯示在文本標簽左側。

關聯的數據值列表。

每個數據項關聯的數據數量應與 columns 屬性相同。如果比 columns 屬性的少,剩下的值將視為空。如果多于 columns 屬性的,多余數據將被忽略。

open

TrueFalse,表明是否顯示數據項的子樹。

tags

與該數據項關聯的 tag 列表。

tag 屬性?

tag 可定義以下屬性:

選項

描述

foreground

定義文本前景色。

背景

定義單元格或數據項的背景色。

font

定義文本的字體。

圖片

定義數據項的圖片,當 image 屬性為空時使用。

列標識?

列標識可用以下格式給出:

  • 由 columns 屬性給出的符號名。

  • 整數值 n,指定第 n 列。

  • #n 的字符串格式,n 是整數,指定第 n 個顯示列。

注釋:

  • 數據項屬性的顯示順序可能與存儲順序不一樣。

  • #0 列一定是指 tree 列,即便未指定 show="tree" 也是一樣。

數據列號是指屬性值列表中的索引值,顯示列號是指顯示在樹控件中的列號。樹的文本標簽將顯示在 #0 列。如果未設置 displaycolumns 屬性,則數據列 n 將顯示在第 #n+1 列。再次強調一下,#0 列一定是指 tree 列

虛擬事件?

Treeview 控件會生成以下虛擬事件。

Event

描述

<<TreeviewSelect>>

當選中項發生變化時生成。

<<TreeviewOpen>>

當焦點所在項的 open= True 時立即生成。

<<TreeviewClose>>

當焦點所在項的 open= True 之后立即生成。

Treeview.focus()Treeview.selection() 方法可用于確認涉及的數據項。

ttk.Treeview?

class tkinter.ttk.Treeview?
bbox(item, column=None)?

返回某 數據項 的邊界(相對于控件窗口的坐標),形式為 (x, y, width, height) 。

若給出了 column,則返回該單元格的邊界。若該 數據項 不可見(即從屬于已關閉項或滾動至屏幕外),則返回空字符串。

get_children(item=None)?

返回從屬于 item 的下級數據項列表。

若未給出 item ,則返回根的下級。

set_children(item, *newchildren)?

newchildren 替換 item 的下級數據。

對于 item 中存在而 newchildren 中不存在的數據項,會從樹中移除。newchildren 中的數據不能是 item 的上級。注意,未給出 newchildren 會導致 item 的子項被移除。

column(column, option=None, **kw)?

查詢或修改 column 的屬性。

如果未給出 kw,則返回屬性值的字典。若指定了 option,則會返回該屬性值。否則將設置屬性值。

合法的 屬性/值 可為:

  • id

    返回列名。這是只讀屬性。

  • anchor:標準的 Tk 錨點值。

    指定該列的文本在單元格內的對齊方式。

  • minwidth:寬度。

    列的最小寬度,單位是像素。在縮放控件或用戶拖動某一列時,Treeview 會保證列寬不小于此值。

  • stretch: True/False

    指明列寬度是否應該在部件大小被改變時進行相應的調整。

  • width: width

    以像素表示的列寬度。

要配置樹的列,則調用此方法并附帶參數 column = "#0"

delete(*items)?

刪除所有 items 及其下屬。

根不能刪除。

detach(*items)?

將所有 items 與樹解除關聯。

數據項及其下屬依然存在,后續可以重新插入,目前只是不顯示出來。

根不能解除關聯。

exists(item)?

如果給出的 item 位于樹中,則返回 True

focus(item=None)?

如果給出 item 則設為當前焦點。否則返回當前焦點所在數據項,若無則返回 ''。

heading(column, option=None, **kw)?

查詢或修改某 column 的標題。

若未給出 kw,則返回列標題組成的列表。若給出了 option 則返回對應屬性值。否則,設置屬性值。

合法的 屬性/值 可為:

  • text:文本。

    顯示為列標題的文本。

  • image:圖片名稱

    指定顯示在列標題右側的圖片。

  • anchor:錨點

    指定列標題文本的對齊方式。應為標準的 Tk 錨點值。

  • command:回調函數

    點擊列標題時執行的回調函數。

若要對 tree 列進行設置,請帶上 column = "#0" 進行調用。

identify(component, x, y)?

返回 xy 位置上 component 控件的描述信息,如果此處沒有這種控件,則返回空字符串。

identify_row(y)?

返回 y 位置上的數據項 ID。

identify_column(x)?

返回 x 位置上的單元格所在的數據列 ID。

tree 列的 ID 為 #0 。

identify_region(x, y)?

返回以下值之一:

region

區域

標題欄

樹的標題欄區域。

heading

兩個列標題之間的間隔區域。

tree

樹區域。

cell

數據單元格。

可用性:Tk 8.6。

identify_element(x, y)?

返回位于 xy 的數據項。

可用性:Tk 8.6。

index(item)?

返回 item 在其數據項列表中的整數索引。

insert(parent, index, iid=None, **kw)?

新建一個數據項并返回其 ID。

parent 是父項的 ID,若要新建頂級項則為空字符串。 index 是整數或“end”,指明在父項的子項列表中的插入位置。如果 index 小于等于0,則在開頭插入新節點;如果 index 大于或等于當前子節點數,則將其插入末尾。如果給出了 iid,則將其用作數據項 ID; iid 不得存在于樹中。否則會新生成一個唯一 ID。

此處可設置的屬性請參閱 Item Options

item(item, option=None, **kw)?

查詢或修改某 item 的屬性。

如果未給出 option,則返回屬性/值構成的字典。如果給出了 option,則返回該屬性的值。否則,將屬性設為 kw 給出的值。

move(item, parent, index)?

item 移至指定位置,父項為 parent ,子項列表索引為 index

將數據項移入其子項之下是非法的。如果 index 小于等于0,item 將被移到開頭;如果大于等于子項的總數,則被移至最后。如果 item 已解除關聯,則會被重新連接。

next(item)?

返回 item 的下一個相鄰項,如果 item 是父項的最后一個子項,則返回 ''。

parent(item)?

返回 item 的父項 ID,如果 item 為頂級節點,則返回 ''。

prev(item)?

返回 item 的前一個相鄰項,若 item 為父項的第一個子項,則返回 ''。

reattach(item, parent, index)?

Treeview.move() 的別名。

see(item)?

確保 item 可見。

item 所有上級的 open 屬性設為 True,必要時會滾動控件,讓 item 處于樹的可見部分。

selection(selop=None, items=None)?

If selop is not specified, returns selected items. Otherwise, it will act according to the following selection methods.

Deprecated since version 3.6, will be removed in version 3.8: Using selection() for changing the selection state is deprecated. Use the following selection methods instead.

selection_set(*items)?

items 成為新的選中項。

在 3.6 版更改: items 可作為多個單獨的參數傳遞,而不是作為一個元組。

selection_add(*items)?

items 加入選中項。

在 3.6 版更改: items 可作為多個單獨的參數傳遞,而不是作為一個元組。

selection_remove(*items)?

從選中項中移除 items?。

在 3.6 版更改: items 可作為多個單獨的參數傳遞,而不是作為一個元組。

selection_toggle(*items)?

切換 items 中各項的選中狀態。

在 3.6 版更改: items 可作為多個單獨的參數傳遞,而不是作為一個元組。

set(item, column=None, value=None)?

若帶一個參數,則返回指定 item 的列/值字典。若帶兩個參數,則返回 column 的當前值。若帶三個參數,則將 itemcolumn 設為 value

tag_bind(tagname, sequence=None, callback=None)?

為 tag 為 tagname 的數據項綁定事件 sequence 的回調函數。當事件分發給該數據項時,tag 參數為 tagname 的全部數據項的回調都會被調用到。

tag_configure(tagname, option=None, **kw)?

查詢或修改 tagname 指定項的參數。

如果給出了 kw,則返回 tagname 項的屬性字典。如果給出了 option,則返回 tagname 項的 option 屬性值。否則,設置 tagname 項的屬性值。

tag_has(tagname, item=None)?

如果給出了 item ,則依據 item 是否具備 tagname 而返回 1 或 0。否則,返回 tag 為 tagname?的所有數據項構成的列表。

可用性:Tk 8.6。

xview(*args)?

查詢或修改 Treeview 的橫向位置。

yview(*args)?

查詢或修改 Treeview 的縱向位置。

Ttk 風格?

ttk 的每種控件都賦有一個樣式,指定了控件內的元素及其排列方式,以及元素屬性的動態和默認設置。默認情況下,樣式名與控件的類名相同,但可能會被控件的 style 屬性覆蓋。如果不知道控件的類名,可用 Misc.winfo_class() 方法獲取(somewidget.winfo_class())。

class tkinter.ttk.Style?

用于操控風格數據庫的類。

configure(style, query_opt=None, **kw)?

查詢或設置 style 的默認參數。

Each key in kw is an option and each value is a string identifying the value for that option.

例如,要將默認按鈕改為扁平樣式,并帶有留白和各種背景色:

from tkinter import ttk
import tkinter

root = tkinter.Tk()

ttk.Style().configure("TButton", padding=6, relief="flat",
   background="#ccc")

btn = ttk.Button(text="Sample")
btn.pack()

root.mainloop()
map(style, query_opt=None, **kw)?

查詢或設置 style 的指定屬性的動態值。

kw 的每個鍵都是一個屬性,每個值通常應為列表或元組,其中包含以元組、列表或其他形式組合而成的狀態標識(statespec)。狀態標識是由一個或多個狀態組合,加上一個值組成。

舉個例子能更清晰些:

import tkinter
from tkinter import ttk

root = tkinter.Tk()

style = ttk.Style()
style.map("C.TButton",
    foreground=[('pressed', 'red'), ('active', 'blue')],
    background=[('pressed', '!disabled', 'black'), ('active', 'white')]
    )

colored_btn = ttk.Button(text="Test", style="C.TButton").pack()

root.mainloop()

請注意,要點是屬性的(狀態,值)序列的順序,如果前景色屬性的順序改為 [('active', 'blue'), ('pressed', 'red')] ,則控件處于激活或按下狀態時的前景色將為藍色。

lookup(style, option, state=None, default=None)?

返回 style 中的 option?屬性值。

如果給出了 state ,則應是一個或多個狀態組成的序列。如果設置了 default 參數,則在屬性值缺失時會用作后備值。

若要檢測按鈕的默認字體,可以:

from tkinter import ttk

print(ttk.Style().lookup("TButton", "font"))
layout(style, layoutspec=None)?

按照 style 定義控件布局。如果省略了 layoutspec,則返回該樣式的布局屬性。

若給出了 layoutspec,則應為一個列表或其他的序列類型(不包括字符串),其中的數據項應為元組類型,第一項是布局名稱,第二項的格式應符合 Layouts 的描述。

以下示例有助于理解這種格式(這里并沒有實際意義):

from tkinter import ttk
import tkinter

root = tkinter.Tk()

style = ttk.Style()
style.layout("TMenubutton", [
   ("Menubutton.background", None),
   ("Menubutton.button", {"children":
       [("Menubutton.focus", {"children":
           [("Menubutton.padding", {"children":
               [("Menubutton.label", {"side": "left", "expand": 1})]
           })]
       })]
   }),
])

mbtn = ttk.Menubutton(text='Text')
mbtn.pack()
root.mainloop()
element_create(elementname, etype, *args, **kw)?

在當前主題中創建一個新元素 etype ,應為 image、from 或 vsapi。后者僅在 Windows XP 和 Vista 版的 Tk 8.6a 中可用,此處不再贅述。

如果用了 image,則 args 應包含默認的圖片名,后面跟著 狀態標識/值(這里是 imagespec),kw 可帶有以下屬性:

  • border=padding

    padding 是由不超過四個整數構成的列表,分別定義了左、頂、右、底的邊界。

  • height=height

    定義了元素的最小高度。如果小于零,則默認采用圖片本身的高度。

  • padding=padding

    定義了元素的內部留白。若未指定則默認采用 border 值。

  • sticky=spec

    定義了圖片的對齊方式。spec 包含零個或多個 n、s、w、e 字符。

  • width=width

    定義了元素的最小寬度。如果小于零,則默認采用圖片本身的寬度。

如果 etype 的值用了 from,則 element_create() 將復制一個現有的元素。 args 應包含主題名和可選的要復制的元素。若未給出要克隆的元素,則采用空元素。 kw 參數將被丟棄。

element_names()?

返回當前主題已定義的元素列表 。

element_options(elementname)?

返回 elementname 的屬性列表。

theme_create(themename, parent=None, settings=None)?

新建一個主題。

如果 themename 已經存在,則會報錯。如果給出了 parent,則新主題將從父主題繼承樣式、元素和布局。若給出了 settings ,則語法應與 theme_settings() 的相同。

theme_settings(themename, settings)?

將當前主題臨時設為 themename,并應用 settings,然后恢復之前的主題。

settings 中的每個鍵都是一種樣式而每個值可能包含 'configure', 'map', 'layout' 和 'element create' 等鍵并且它們被預期具有與分別由 Style.configure(), Style.map(), Style.layout()Style.element_create() 方法所指定的相符的格式。

以下例子會對 Combobox 的默認主題稍作修改:

from tkinter import ttk
import tkinter

root = tkinter.Tk()

style = ttk.Style()
style.theme_settings("default", {
   "TCombobox": {
       "configure": {"padding": 5},
       "map": {
           "background": [("active", "green2"),
                          ("!disabled", "green4")],
           "fieldbackground": [("!disabled", "green3")],
           "foreground": [("focus", "OliveDrab1"),
                          ("!disabled", "OliveDrab2")]
       }
   }
})

combo = ttk.Combobox().pack()

root.mainloop()
theme_names()?

返回所有已知主題的列表。

theme_use(themename=None)?

若未給出 themename,則返回正在使用的主題。否則,將當前主題設為 themename,刷新所有控件并引發 <<ThemeChanged>> 事件。

布局?

布局在沒有屬性時可以為 None ,或是定義了元素排列方式的屬性字典。布局機制采用了位置管理器的簡化版本:給定一個初始容器(cavity),為每個元素都分配一個包裝(parcel)。合法的選項/值包括:

  • side: whichside

    指定元素置于容器的哪一側; 頂、右、底或左。如果省略,則該元素將占據整個容器。

  • sticky: nswe

    指定元素在已分配包裝盒內的放置位置。

  • unit: 0 或 1

    如果設為 1,則將元素及其所有后代均視作單個元素以供 Widget.identify() 等使用。 它被用于滾動條之類帶有控制柄的東西。

  • children: [sublayout... ]

    指定要放置于元素內的元素列表。每個元素都是一個元組(或其他序列類型),其中第一項是布局名稱,另一項是個 Layout