tkinter.ttk — Tk 主題視窗小部件

原始碼: Lib/tkinter/ttk.py


tkinter.ttk 模組提供了對 Tk 主題視窗小部件集的訪問,該視窗小部件集在 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 小部件。

這直接帶來了使用新小部件的好處,從而在各個平臺上提供了更好的外觀和感覺。但是,替換的小部件並非完全相容。主要區別在於,小部件選項(如“fg”,“bg”和與小部件樣式相關的其他選項)不再出現在 Ttk 小部件中。相反,請使用 ttk.Style 類來獲得改進的樣式效果。

另請參閱

將現有應用程式轉換為使用 Tile 小部件

一篇關於將應用程式移至使用新小部件時通常遇到的差異的專著(使用 Tcl 術語)。

Ttk 小部件

Ttk 帶有 18 個小部件,其中 12 個已經存在於 tkinter 中:ButtonCheckbuttonEntryFrameLabelLabelFrameMenubuttonPanedWindowRadiobuttonScaleScrollbarSpinbox。 其他六個是新的:ComboboxNotebookProgressbarSeparatorSizegripTreeview。 它們都是 Widget 的子類。

使用 Ttk 小部件使應用程式具有改進的外觀和感覺。 如上所述,樣式編碼方式存在差異。

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

可用於指定自定義小部件樣式。

可滾動小部件選項

以下選項受捲軸控制的小部件支援。

選項

描述

xscrollcommand

用於與水平捲軸通訊。

當小部件視窗中的檢視更改時,小部件將基於 scrollcommand 生成一個 Tcl 命令。

通常,此選項由某個捲軸的 Scrollbar.set() 方法組成。 這將導致在視窗中的檢視更改時更新捲軸。

yscrollcommand

用於與垂直捲軸通訊。 有關更多資訊,請參見上文。

標籤選項

以下選項受標籤、按鈕和其他類似按鈕的小部件支援。

選項

描述

text

指定要在小部件內部顯示的文字字串。

textvariable

指定名稱,其值將代替 text 選項資源使用。

underline

如果設定,則指定要在文字字串中新增下劃線的字元的索引(從 0 開始)。 下劃線字元用於助記符啟用。

image

指定要顯示的影像。這是一個包含一個或多個元素的列表。第一個元素是預設的影像名稱。列表的其餘部分是狀態規範/值對的序列,如 Style.map() 所定義,用於指定當小部件處於特定狀態或狀態組合時要使用的不同影像。列表中所有影像的大小應相同。

compound

指定在同時存在文字和影像選項的情況下,如何相對於文字顯示影像。有效值包括:

  • text: 僅顯示文字

  • image: 僅顯示影像

  • top, bottom, left, right: 分別在文字的上方、下方、左側或右側顯示影像。

  • none: 預設值。如果存在影像則顯示影像,否則顯示文字。

width

如果大於零,則指定為文字標籤分配多少空間(以字元寬度為單位);如果小於零,則指定最小寬度。如果為零或未指定,則使用文字標籤的自然寬度。

相容性選項

選項

描述

state

可以設定為 “normal” 或 “disabled” 來控制 “disabled” 狀態位。這是一個只寫選項:設定它會更改小部件狀態,但 Widget.state() 方法不會影響此選項。

小部件狀態

小部件狀態是獨立狀態標誌的點陣圖。

標誌

描述

active

滑鼠游標位於小部件上方,並且按下滑鼠按鈕將導致某些操作發生

disabled

小部件在程式控制下被停用

focus

小部件擁有鍵盤焦點

pressed

小部件正在被按下

selected

對於複選按鈕和單選按鈕等,為“On”、“true”或“current”

background

Windows 和 Mac 有一個“活動”或前臺視窗的概念。background 狀態為後臺視窗中的小部件設定,併為前臺視窗中的小部件清除

readonly

小部件不應允許使用者修改

alternate

小部件特定的備用顯示格式

invalid

小部件的值無效

狀態規範是一系列狀態名稱,可以選擇以感嘆號作為字首,表示該位關閉。

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 通常是一個列表或一個元組。

Combobox

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

布林值。如果設定,則小部件選擇將連結到視窗管理器選擇(例如,可以透過呼叫 Misc.selection_get 返回)。

justify

指定文字在小部件中的對齊方式。可以是 “left”、“center” 或 “right” 中的一個。

height

指定下拉列表框的高度,以行數為單位。

postcommand

一個指令碼(可能已在 Misc.register 中註冊),該指令碼在顯示值之前立即呼叫。它可以指定要顯示的值。

state

可以是 “normal”、“readonly” 或 “disabled” 中的一個。“readonly” 狀態下,值不能直接編輯,使用者只能從下拉列表中選擇值。“normal” 狀態下,文字欄位可以直接編輯。“disabled” 狀態下,無法進行任何互動。

textvariable

指定一個名稱,其值連結到小部件的值。每當與該名稱關聯的值更改時,小部件的值都會更新,反之亦然。請參閱 tkinter.StringVar

values

指定要在下拉列表框中顯示的值列表。

width

指定一個整數值,指示條目視窗所需的寬度,以小部件字型的平均字元大小為單位。

虛擬事件

當用戶從值列表中選擇一個元素時,組合框小部件會生成一個 <<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.identify()Widget.instate()Widget.state(),以及從 Entry 繼承的以下方法:Entry.bbox()Entry.delete()Entry.icursor()Entry.index()Entry.insert()Entry.xview() 外,它還有一些其他方法,在 ttk.Spinbox 中進行了描述。

選項

此小部件接受以下特定選項

選項

描述

from

浮點數值。如果設定,這將是遞減按鈕將遞減到的最小值。當用作引數時,必須拼寫為 from_,因為 from 是 Python 關鍵字。

to

浮點數值。如果設定,這將是遞增按鈕將遞增到的最大值。

increment

浮點數值。指定遞增/遞減按鈕更改值的幅度。預設為 1.0。

values

字串或浮點數值的序列。如果指定,遞增/遞減按鈕將迴圈遍歷此序列中的項,而不是遞增或遞減數字。

wrap

布林值。如果為 True,遞增和遞減按鈕將分別從 to 值迴圈到 from 值,或從 from 值迴圈到 to 值。

format

字串值。這指定了由遞增/遞減按鈕設定的數字格式。它必須採用“%W.Pf”的形式,其中 W 是值的填充寬度,P 是精度,而 ‘%’ 和 ‘f’ 是字面量。

command

Python 可呼叫物件。每當按下遞增或遞減按鈕時,將不帶任何引數呼叫此物件。

虛擬事件

當用戶按下 <Up> 時,微調框小部件會生成一個 <<Increment>> 虛擬事件;當用戶按下 <Down> 時,會生成一個 <<Decrement>> 虛擬事件。

ttk.Spinbox

class tkinter.ttk.Spinbox
get()

返回微調框的當前值。

set(value)

將微調框的值設定為 value

Notebook

Ttk Notebook 小部件管理一系列視窗,並一次顯示一個視窗。每個子視窗都與一個標籤頁相關聯,使用者可以選擇該標籤頁來更改當前顯示的視窗。

選項

此小部件接受以下特定選項

選項

描述

height

如果存在且大於零,則指定窗格區域的所需高度(不包括內部填充或選項卡)。否則,使用所有窗格的最大高度。

padding

指定在筆記本外部周圍新增的額外空間量。填充是最多包含四個長度規範(左、上、右、下)的列表。如果指定的元素少於四個,則下預設為上,右預設為左,上預設為左。

width

如果存在且大於零,則指定窗格區域的所需寬度(不包括內部填充)。否則,使用所有窗格的最大寬度。

標籤頁選項

標籤頁也有特定的選項

選項

描述

state

可以是“normal”、“disabled”或“hidden”。如果為“disabled”,則無法選擇該標籤頁。如果為“hidden”,則不顯示該標籤頁。

sticky

指定子視窗在窗格區域中的位置。該值是一個字串,包含零個或多個字元“n”、“s”、“e”或“w”。每個字母表示子視窗將粘附到的邊(北、南、東或西),與 grid() 幾何管理器一樣。

padding

指定在筆記本和此窗格之間新增的額外空間量。語法與此小部件使用的選項填充相同。

text

指定要在選項卡中顯示的文字。

image

指定要在選項卡中顯示的影像。請參閱 Widget 中描述的影像選項。

compound

指定在同時存在文字和影像選項的情況下,如何相對於文字顯示影像。有關合法值,請參閱 標籤選項

underline

指定要加下劃線的文字字串中字元的索引(從 0 開始)。如果呼叫 Notebook.enable_traversal(),則帶下劃線的字元用於助記符啟用。

標籤頁識別符號

ttk.Notebook 的幾種方法中出現的 tab_id 可以採用以下任何一種形式

  • 一個介於零和標籤頁數量之間的整數

  • 子視窗的名稱

  • “@x,y”形式的位置規範,用於標識選項卡

  • 文字字串“current”,用於標識當前選定的標籤頁

  • 文字字串“end”,用於返回標籤頁的數量(僅對 Notebook.index() 有效)

虛擬事件

選擇新標籤頁後,此小部件會生成一個 <<NotebookTabChanged>> 虛擬事件。

ttk.Notebook

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

向筆記本新增新標籤頁。

如果視窗當前由筆記本管理但被隱藏,則會將其恢復到之前的位置。

有關可用選項的列表,請參閱 標籤頁選項

forget(tab_id)

刪除由 tab_id 指定的標籤頁,取消對映並取消管理關聯的視窗。

hide(tab_id)

隱藏由 tab_id 指定的標籤頁。

該標籤頁將不會顯示,但關聯的視窗仍由筆記本管理,並且其配置會被記住。可以使用 add() 命令恢復隱藏的標籤頁。

identify(x, y)

返回位置 x, y 處的標籤頁元素的名稱,如果沒有則返回空字串。

index(tab_id)

返回由 tab_id 指定的標籤頁的數字索引,如果 tab_id 是字串 “end”,則返回標籤頁的總數。

insert(pos, child, **kw)

在指定位置插入一個窗格。

pos 可以是字串 “end”、一個整數索引或託管子元素的名稱。如果 child 已經由筆記本管理,則將其移動到指定位置。

有關可用選項的列表,請參閱 標籤頁選項

select(tab_id=None)

選擇指定的 tab_id

將顯示關聯的子視窗,並且將取消對映先前選定的視窗(如果不同)。如果省略 tab_id,則返回當前選定窗格的小部件名稱。

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

查詢或修改特定 tab_id 的選項。

如果未給出 kw,則返回標籤頁選項值的字典。如果指定了 option,則返回該 option 的值。否則,將選項設定為相應的值。

tabs()

返回由筆記本管理的視窗列表。

enable_traversal()

為包含此筆記本的頂層視窗啟用鍵盤遍歷。

這將擴充套件包含筆記本的頂層視窗的繫結,如下所示:

  • Control-Tab:選擇當前選定標籤之後的標籤。

  • Shift-Control-Tab:選擇當前選定標籤之前的標籤。

  • Alt-K:其中 K 是任何標籤的助記符(帶下劃線)字元,將選擇該標籤。

可以啟用單個頂層視窗中的多個筆記本進行遍歷,包括巢狀的筆記本。但是,只有當所有窗格都以其所在的筆記本為主控時,筆記本遍歷才能正常工作。

進度條

ttk.Progressbar 小部件顯示長時間執行操作的狀態。它可以以兩種模式執行:1) 確定模式,顯示相對於要完成的總工作量已完成的量;2) 不確定模式,提供動畫顯示,讓使用者知道工作正在進行中。

選項

此小部件接受以下特定選項

選項

描述

orient

“horizontal” 或 “vertical” 之一。指定進度條的方向。

length

指定進度條長軸的長度(如果是水平的則為寬度,如果是垂直的則為高度)。

mode

“determinate” 或 “indeterminate” 之一。

maximum

指定最大值的數字。預設為 100。

value

進度條的當前值。在 “determinate” 模式下,這表示已完成的工作量。在 “indeterminate” 模式下,它被解釋為模 maximum;也就是說,當其值增加 maximum 時,進度條完成一個 “迴圈”。

variable

連結到選項值的名稱。如果指定,則只要後者被修改,進度條的值就會自動設定為此名稱的值。

phase

只讀選項。每當其值大於 0 且在確定模式下小於最大值時,小部件會定期增加此選項的值。當前主題可以使用此選項來提供額外的動畫效果。

ttk.Progressbar

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

開始自動遞增模式:計劃一個重複的計時器事件,該事件每隔 interval 毫秒呼叫 Progressbar.step()。如果省略,則 interval 預設為 50 毫秒。

step(amount=None)

將進度條的值遞增 amount

如果省略,amount 預設為 1.0。

stop()

停止自動遞增模式:取消由 Progressbar.start() 為此進度條啟動的任何重複計時器事件。

分隔符

ttk.Separator 小部件顯示水平或垂直分隔欄。

除了從 ttk.Widget 繼承的方法之外,它沒有其他方法。

選項

此小部件接受以下特定選項

選項

描述

orient

“horizontal” 或 “vertical” 之一。指定分隔符的方向。

尺寸手柄

ttk.Sizegrip 小部件(也稱為增長框)允許使用者透過按住並拖動手柄來調整包含的頂層視窗的大小。

除了從 ttk.Widget 繼承的方法之外,此小部件既沒有特定的選項也沒有特定的方法。

特定於平臺的說明

  • 在 macOS 上,頂層視窗預設自動包含內建尺寸手柄。新增 Sizegrip 是無害的,因為內建手柄只會遮蓋該小部件。

Bug

  • 如果包含的頂層視窗的位置是相對於螢幕的右側或底部指定的(例如,…),則 Sizegrip 小部件將不會調整視窗大小。

  • 此小部件僅支援 “東南” 大小調整。

樹狀檢視

ttk.Treeview 小部件顯示專案的分層集合。每個專案都有一個文字標籤、一個可選影像和一個可選的資料值列表。資料值顯示在樹標籤之後的連續列中。

資料值的顯示順序可以透過設定小部件選項 displaycolumns 來控制。樹形小部件還可以顯示列標題。可以透過數字或小部件選項 columns 中列出的符號名稱來訪問列。請參閱 列識別符號

每個專案都由唯一的名稱標識。如果呼叫者未提供專案 ID,則小部件將生成專案 ID。有一個名為 {} 的特殊根專案。根專案本身不顯示;其子項顯示在層次結構的頂層。

每個專案還有一個標籤列表,該列表可用於將事件繫結與各個專案關聯並控制專案的外觀。

根據 可滾動的小部件選項 中描述的選項以及方法 Treeview.xview()Treeview.yview(),樹狀檢視小部件支援水平和垂直滾動。

選項

此小部件接受以下特定選項

選項

描述

columns

列識別符號列表,指定列的數量及其名稱。

displaycolumns

列識別符號列表(符號或整數索引),指定顯示哪些資料列以及它們的顯示順序,或者字串 “#all”。

height

指定應可見的行數。注意:請求的寬度由列寬的總和確定。

padding

指定小部件的內部填充。填充是最多四個長度規範的列表。

selectmode

控制內建類繫結如何管理選擇。可以是 “extended”、“browse” 或 “none” 之一。如果設定為 “extended”(預設值),則可以選擇多個專案。如果為 “browse”,則一次只能選擇一個專案。如果為 “none”,則不會更改選擇。

請注意,應用程式程式碼和標籤繫結可以隨意設定選擇,而不管此選項的值如何。

show

包含零個或多個以下值的列表,指定要顯示樹的哪些元素。

  • tree:在第 #0 列中顯示樹標籤。

  • headings:顯示標題行。

預設值為 “tree headings”,即顯示所有元素。

注意:即使未指定 show=”tree”,第 #0 列始終是指樹列。

專案選項

以下專案選項可以在 insert 和 item 小部件命令中為專案指定。

選項

描述

text

要為專案顯示的文字標籤。

image

一個 Tk 影像,顯示在標籤的左側。

values

與專案關聯的值列表。

每個專案應具有與小部件選項列相同數量的值。如果值的數量少於列,則剩餘的值假定為空。如果值的數量多於列,則忽略額外的值。

open

True/False 值,指示是否應顯示或隱藏專案的子項。

tags

與此專案關聯的標籤列表。

標籤選項

以下選項可以在標籤上指定

選項

描述

foreground

指定文字前景色。

background

指定單元格或專案背景色。

font

指定繪製文字時要使用的字型。

image

指定專案影像,以防專案的 image 選項為空。

列識別符號

列標識符采用以下任何形式

  • 來自 columns 選項列表的符號名稱。

  • 整數 n,指定第 n 個數據列。

  • 形式為 #n 的字串,其中 n 是整數,指定第 n 個顯示列。

備註

  • 專案的選項值可能以與它們儲存的順序不同的順序顯示。

  • 即使未指定 show=”tree”,第 #0 列始終是指樹列。

資料列號是專案選項值列表的索引;顯示列號是值在樹中顯示的列號。樹標籤顯示在第 0 列。如果未設定選項 displaycolumns,則資料列 n 將顯示在第 n+1 列。同樣,第 0 列始終指的是樹列

虛擬事件

Treeview 部件生成以下虛擬事件。

事件

描述

<<TreeviewSelect>>

每當選擇更改時生成。

<<TreeviewOpen>>

在將焦點項設定為 open=True 之前生成。

<<TreeviewClose>>

在將焦點項設定為 open=False 之後生成。

可以使用 Treeview.focus()Treeview.selection() 方法來確定受影響的專案。

ttk.Treeview

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

返回指定專案的邊界框(相對於樹檢視視窗),格式為 (x, y, width, height)。

如果指定了 column,則返回該單元格的邊界框。如果專案不可見(即,如果它是已關閉專案的後代或已滾動到螢幕外),則返回空字串。

get_children(item=None)

返回屬於專案的子項列表。

如果未指定專案,則返回根子項。

set_children(item, *newchildren)

newchildren 替換專案的子項。

專案中存在但 newchildren 中不存在的子項將從樹中分離。newchildren 中的任何項都不能是專案的祖先。請注意,不指定 newchildren 會導致分離專案的子項。

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

查詢或修改指定的選項。

如果未給定 kw,則返回列選項值的字典。如果指定了 option,則返回該選項的值。否則,將選項設定為相應的值。

有效的選項/值是

id

返回列名。這是一個只讀選項。

anchor:標準 Tk 定位值之一。

指定此列中的文字應如何相對於單元格對齊。

minwidth:寬度

列的最小寬度(以畫素為單位)。當調整部件大小或使用者拖動列時,樹檢視部件不會使列小於此選項指定的值。

stretchTrue/False

指定在調整部件大小後是否應調整列的寬度。

width:寬度

列的寬度(以畫素為單位)。

要配置樹列,請使用 column = “#0” 呼叫此函式

delete(*items)

刪除所有指定的專案及其所有後代。

不能刪除根專案。

detach(*items)

從樹中取消連結所有指定的專案

這些專案及其所有後代仍然存在,並且可以在樹中的另一個位置重新插入,但不會顯示。

不能分離根專案。

exists(item)

如果指定的專案存在於樹中,則返回 True

focus(item=None)

如果指定了 item,則將焦點項設定為 item。否則,返回當前焦點項,如果沒有焦點項,則返回 ''。

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

查詢或修改指定的標題選項。

如果未給定 kw,則返回標題選項值的字典。如果指定了 option,則返回該選項的值。否則,將選項設定為相應的值。

有效的選項/值是

text:文字

要在列標題中顯示的文字。

image:imageName

指定要在列標題右側顯示的影像。

anchor:定位

指定標題文字的對齊方式。標準 Tk 定位值之一。

command:回撥

按下標題標籤時要呼叫的回撥。

要配置樹列標題,請使用 column = “#0” 呼叫此函式。

identify(component, x, y)

返回由 xy 給定的點下的指定元件的描述,如果該位置不存在此類元件,則返回空字串。

identify_row(y)

返回位置 y 處的專案的專案 ID。

identify_column(x)

返回位置 x 處的單元格的資料列識別符號。

樹列的 ID 為 #0。

identify_region(x, y)

返回以下值之一

區域

含義

heading

樹標題區域。

separator

兩個列標題之間的空格。

tree

樹區域。

cell

資料單元格。

可用性:Tk 8.6。

identify_element(x, y)

返回位置 x, y 處的元素。

可用性:Tk 8.6。

index(item)

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

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

建立一個新專案並返回新建立專案的專案識別符號。

parent 是父項的專案 ID,或者為空字串以建立新的頂級專案。index 是一個整數,或者值 “end”,指定將新專案插入到父項子項列表中的位置。如果 index 小於或等於零,則將新節點插入到開頭;如果 index 大於或等於當前子項數,則將其插入到末尾。如果指定了 iid,則將其用作專案識別符號;iid 不能已存在於樹中。否則,將生成一個新的唯一識別符號。

有關可用選項的列表,請參閱 專案選項

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

查詢或修改指定專案的選項。

如果沒有給出選項,則返回包含專案選項/值的字典。如果指定了 option,則返回該選項的值。否則,將選項設定為 kw 給出的相應值。

move(item, parent, index)

item 移動到 parent 的子項列表中的位置 index

將專案移動到其後代之一的下方是非法的。如果 index 小於或等於零,則將 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()

返回選定項的元組。

在 3.8 版本中更改: selection() 不再接受引數。要更改選擇狀態,請使用以下選擇方法。

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 的當前值。使用三個引數,將給定 item 中給定 column 的值設定為指定的 value

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

將給定事件sequence的回撥繫結到標籤tagname。當事件傳遞給某個項時,將呼叫該項的每個標籤選項的回撥。

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

查詢或修改指定的 tagname 的選項。

如果未指定 kw,則返回 tagname 的選項設定的字典。如果指定了 option,則返回指定 tagname 的該 option 的值。否則,將選項設定為給定 tagname 的相應值。

tag_has(tagname, item=None)

如果指定了 item,則根據指定的 item 是否具有給定的 tagname 返回 1 或 0。否則,返回具有指定標籤的所有項的列表。

可用性: Tk 8.6

xview(*args)

查詢或修改樹狀檢視的水平位置。

yview(*args)

查詢或修改樹狀檢視的垂直位置。

Ttk 樣式

ttk 中的每個小部件都分配有一個樣式,該樣式指定構成小部件的一組元素以及它們如何排列,以及元素選項的動態和預設設定。預設情況下,樣式名稱與小部件的類名稱相同,但可以透過小部件的樣式選項覆蓋。如果你不知道小部件的類名,請使用方法 Misc.winfo_class() (somewidget.winfo_class())。

另請參閱

Tcl’2004 會議簡報

本文件解釋了主題引擎的工作原理

class tkinter.ttk.Style

此類用於操作樣式資料庫。

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

查詢或設定 style 中指定選項的預設值。

kw 中的每個鍵都是一個選項,每個值都是一個字串,用於標識該選項的值。

例如,要將每個預設按鈕更改為具有一些填充和不同背景顏色的平面按鈕

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 中的每個鍵都是一個選項,每個值都應是一個列表或元組(通常),其中包含分組在元組、列表或其他首選項中的狀態規範。狀態規範是一個或多個狀態以及一個值的組合。

一個例子可能會使其更容易理解

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()

請注意,選項的(狀態,值)序列的順序很重要,例如,如果在 foreground 選項中將順序更改為 [('active', 'blue'), ('pressed', 'red')],則當小部件處於活動或按下狀態時,結果將為藍色前景。

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

返回在 style 中為 option 指定的值。

如果指定了 state,則期望它是一個或多個狀態的序列。如果設定了 default 引數,則在找不到選項的規範時,它將用作回退值。

要檢查 Button 預設使用的字型

from tkinter import ttk

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

為給定的 style 定義小部件佈局。如果省略了 layoutspec,則返回給定樣式的佈局規範。

如果指定了 layoutspec,則期望它是一個列表或其他序列型別(不包括字串),其中每個項都應是一個元組,並且第一項是佈局名稱,第二項應具有 佈局 中描述的格式。

要理解格式,請參閱以下示例(它不打算做任何有用的事情)

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 上的 Tk 8.6 中可用。

如果使用 “image”,args 應包含預設的影像名稱,後跟狀態規範/值對(即 imagespec),並且 kw 可能具有以下選項:

border=padding

padding 是一個最多包含四個整數的列表,分別指定左、上、右和下邊框。

height=height

指定元素的最小高度。如果小於零,則使用基本影像的高度作為預設值。

padding=padding

指定元素的內部填充。如果未指定,則預設為邊框的值。

sticky=spec

指定影像在最終包裹中的放置方式。spec 包含零個或多個字元 “n”、“s”、“w” 或 “e”。

width=width

指定元素的最小寬度。如果小於零,則使用基本影像的寬度作為預設值。

示例

img1 = tkinter.PhotoImage(master=root, file='button.png')
img1 = tkinter.PhotoImage(master=root, file='button-pressed.png')
img1 = tkinter.PhotoImage(master=root, file='button-active.png')
style = ttk.Style(root)
style.element_create('Button.button', 'image',
                     img1, ('pressed', img2), ('active', img3),
                     border=(2, 4), sticky='we')

如果將 “from” 用作 etype 的值,element_create() 將克隆現有元素。args 應該包含一個主題名稱,從中克隆元素,以及可選的要克隆的元素。如果未指定要克隆的元素,則將使用空元素。kw 將被丟棄。

示例

style = ttk.Style(root)
style.element_create('plain.background', 'from', 'default')

如果將 “vsapi” 用作 etype 的值,element_create() 將在當前主題中建立一個新元素,其視覺外觀是使用 Microsoft Visual Styles API 繪製的,該 API 負責 Windows XP 和 Vista 上的主題樣式。args 應包含 Microsoft 文件中給出的 Visual Styles 類和部分,後跟可選的 ttk 狀態元組和相應的 Visual Styles API 狀態值序列。kw 可能具有以下選項:

padding=padding

指定元素的內部填充。padding 是一個最多包含四個整數的列表,分別指定左、上、右和下填充量。如果指定的元素少於四個,則底部預設為頂部,右側預設為左側,頂部預設為左側。換句話說,包含三個數字的列表指定左側、垂直和右側填充;包含兩個數字的列表指定水平和垂直填充;單個數字指定小部件周圍的相同填充。此選項不能與任何其他選項混合使用。

margins=padding

指定元素的外部填充。padding 是一個最多包含四個整數的列表,分別指定左、上、右和下填充量。此選項不能與任何其他選項混合使用。

width=width

指定元素的寬度。如果設定此選項,則不會查詢 Visual Styles API 以獲取建議的大小或部分。如果設定此選項,則還應設定 heightwidthheight 選項不能與 paddingmargins 選項混合使用。

height=height

指定元素的高度。請參閱 width 的註釋。

示例

style = ttk.Style(root)
style.element_create('pin', 'vsapi', 'EXPLORERBAR', 3, [
                     ('pressed', '!selected', 3),
                     ('active', '!selected', 2),
                     ('pressed', 'selected', 6),
                     ('active', 'selected', 5),
                     ('selected', 4),
                     ('', 1)])
style.layout('Explorer.Pin',
             [('Explorer.Pin.pin', {'sticky': 'news'})])
pin = ttk.Checkbutton(style='Explorer.Pin')
pin.pack(expand=True, fill='both')

3.13 版本更改: 添加了對 “vsapi” 元素工廠的支援。

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() 指定的格式相同。

例如,讓我們稍微更改預設主題的組合框

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,否則是一個選項字典,指定如何排列元素。佈局機制使用 pack 幾何管理器的一個簡化版本:給定一個初始空腔,每個元素都被分配一個包裹。

有效的選項/值是

side: whichside

指定將元素放置在空腔的哪一側;top、right、bottom 或 left 中的一個。如果省略,則元素將佔據整個空腔。

sticky: nswe

指定元素在其分配的包裹內的放置位置。

unit: 0 或 1

如果設定為 1,則為了 Widget.identify() 等方法的目的,將元素及其所有後代視為單個元素。它用於諸如帶有抓手的捲軸滑塊之類的東西。

children: [sublayout… ]

指定要放置在元素內部的元素列表。每個元素都是一個元組(或其他序列型別),其中第一個專案是佈局名稱,另一個是 佈局