《tkinter實用教程二》ttk 子模塊


本教程是博主個人心血,未經允許不可引用,引用必舉報,舉報必封號。
博主個人博客【魏大王官網】,內容更精彩!!

《tkinter實用教程一》Linux 環境下安裝tkinter

《tkinter實用教程二》tkinter 子模塊 ttk

《tkinter實用教程三》tkinter Button 控件

《tkinter實用教程四》tkinter 布局管理 Grid

《tkinter實用教程五》tkinter ttk.Frame控件

tkinter 的子模塊 ttk

本文主要介紹 tkinter 子模塊的特性,以及和原生 tkinter 控件之間的區別。

tkinter.ttk 模塊提供了對 tk 風格控件集合的訪問途徑,在 tkinter 8.5 中引入。

引入 tkinter.ttk 的基本思想是盡可能將實現控件行為的代碼與實現其外觀的代碼分開。

如果用一句話解釋引入 ttk 的目的,那就是:

使用 ttk 控件可以改善應用程序的外觀和感覺。

ttk 模塊是 tkinter 的新特性,因此,建議使用 ttk 控件作為開發和學習的重點。

如何創建 ttk 控件

創建 ttk 控件的方法和 tkinter 控件的方法略有不同:

創建一個 tkinter 按鈕:

from tkinter import *

root = Tk()
btn = Button(root,text="tkinter 按鈕")
btn.pack()

root.mainloop()

創建一個 ttk 按鈕:

from tkinter import *
from tkinter import ttk

root = Tk()
btn = ttk.Button(root,text="ttk 按鈕")
btn.pack()

root.mainloop()

以下是兩段代碼的執行結果:

01_tkinter_btn.png02_ttk_btn.png

從截圖可以明顯看出 tkinter 原生按鈕的樣式和 ttk 模塊按鈕的默認樣式是不一樣的。

如何設置 ttk 控件的樣式

ttk 子模塊的引出,主要目的是解決界面美觀度和分離控制代碼和樣式代碼的目的。

所以 ttk 在樣式控制上和 tkinter 有較大區別。

下面以 Label 對象為例,通過創建一個藍底紅字的標簽,說明二者的主要區別:

使用 tkinter 控件的代碼:

from tkinter import *

root = Tk()
l1 = Label(text="label1",fg="red",bg="blue")
l1.pack()

root.mainloop()

使用 ttk 控件的代碼:

from tkinter import *
from tkinter import ttk

root = Tk()

style_default = ttk.Style()
style_default.configure("TLabel",foreground="red",background="blue")

l1 = ttk.Label(root,text="lable1",style='TLabel')
l1.pack()

root.mainloop()

以下是代碼執行的結果:

03_label.png04_label.png

二者在展示效果上基本沒有區別,主要區別在代碼的編寫上。

由於 ttk 分離了控件的創建代碼和樣式代碼,所以代碼看起來比較復雜,行數較多。

實際上,ttk 由於抽離了樣式代碼,同樣的樣式只需要寫一次,在創建控件的時候可以直接引用,所以當控件較多時,會極大的降低工作和代碼量。

tkinter 原生控件每次創建一個控件,都需要寫一遍樣式代碼,所以不適合使用在稍微復雜一點的應用中。

configure() 函數的參數

ttk.Style() 對象實例能夠通過 ttk.Style().configure() 函數設置樣式各選項的值。
ttk.Style().configure() 函數的第一個參數是樣式的名稱,ttk 中所有的控件都默認分配了一個樣式名稱,例如 Button 組件的默認樣式名稱是 "TButton"。
Label 控件的默認樣式名稱是 "TLabel"。

所以上述 ttk 樣式代碼還可以寫成如下模式:

from tkinter import *
from tkinter import ttk

root = Tk()

style_default = ttk.Style()
style_default.configure("TLabel",foreground="red",background="blue")

l1 = ttk.Label(root,text="lable1")
l1.pack()

root.mainloop()

雖然,在創建 Label 對象 l1 時,並沒有指定樣式名稱,但是 style_default 同樣會影響到 l1 的樣式,因為 "TLabel" 樣式是 Label 對象默認的樣式。

代碼執行結果如下圖:

05_style.png

ttk 支持的控件

ttk 帶有17個控件,其中11個已經存在於 tkinter 中:ButtonCheckbuttonEntryFrameLabelLabelFrameMenubuttonPanedWindowRadiobuttonScaleScrollbar

6個新的窗口控件類是:ComboboxNotebookProgressbarSeparatorSizegripTreeview。 所有這些類都是Widget的子類。

ttk 控件通用參數

ttk.Widget 類定義了 tk 風格控件的標准可選參數通用方法,該類類似於 Java 中的接口,不應該直接實例化。

  1. 所有 ttk 控件都能接受以下參數:
參數 描述
class 指定窗口類。 該類用於在選項數據庫中查詢窗口的其他選項、確定窗口的默認綁定標簽以及選擇控件的默認布局和樣式。 此選項是只讀的,只能在創建窗口時指定。
cursor 指定要用於控件的鼠標光標。 如果設置為空字符串(默認值),從父控件繼承光標。
takefocus 確定窗口在鍵盤遍歷期間是否接受焦點。 返回 0、1 或空字符串。 如果返回 0,則表示在鍵盤遍歷期間應完全跳過該窗口。 如果為 1,則表示只要窗口可見,就應該接收輸入焦點。 空字符串意味着遍歷腳本決定是否關注窗口。
style 可用於指定控件樣式。
  1. 可滾動控件的通用可選參數

具備滾動條的控件支持以下可選參數:

參數 描述
xscrollcommand 用於與水平滾動條通信。當widget窗口中的視圖發生變化時,widget會根據scrollcommand生成Tcl命令。通常這個選項由一些滾動條的Scrollbar.set()方法組成。 這將導致滾動條在窗口中的視圖發生變化時更新。
yscrollcommand 用於與垂直滾動條通信。 有關更多信息,請參見上文。
  1. 標簽類控件的通用參數
    LabelButton類Button 控件支持以下可選參數:
參數 描述
text 指定在控件中展示的字符串
textvariable 指定一個變量名,這個變量的值會填充text參數,展示在控件中。
underline 如果設置,則指定要在文本字符串中加下划線的字符的索引(從 0 開始)。 下划線字符用於助記符激活。
image 指定要顯示的圖像。 這是一個包含 1 個或多個元素的列表。 第一個元素是默認圖像名稱。 列表的其余部分是由 Style.map() 定義的一系列 statespec/value 對,指定當小部件處於特定狀態或狀態組合時要使用的不同圖像。 列表中的所有圖像都應具有相同的大小。
compound 在文本和圖像選項都存在的情況下,指定如何相對於文本顯示圖像。 有效值為:text:僅顯示文本;image:僅顯示圖像;top、bottom、left、right:分別顯示文本的上方、下方、左側或右側的圖像。none:默認值。 顯示圖像(如果存在),否則顯示文本。
width 如果大於零,則指定為文本標簽分配多少字符寬度的空間,如果小於零,則指定最小寬度。 如果為零或未指定,則使用文本標簽的自然寬度。
  1. 兼容性選項
參數 描述
state 可設置為 normaldisabled 以控制“禁用”狀態位。 這是一個只寫選項:設置它會更改控件狀態,但 Widget.state() 方法不影響此選項。
  1. 控件狀態

控件狀態由獨立的狀態標志組成的位圖:

參數 描述
active 鼠標光標在小部件上,按下鼠標按鈕會導致一些動作發生。
disabled 在程序控制下,控件被禁用
focus 焦點
pressed 控件被按下
selected Ontruecurrent 用於諸如 Checkbuttons 和 radiobuttons 之類的東西
background Windows和Mac有一個“active”或前景窗口的概念。背景狀態在后台窗口中為控件設置,並在前台窗口中清除。
readonly 只讀,不允許用戶改動
alternate 特定於窗口控件件的替代顯示格式。
invalid 控件的值無效。

博主個人博客【魏大王官網】,內容更精彩!!

《tkinter實用教程一》Linux 環境下安裝tkinter

《tkinter實用教程二》tkinter 子模塊 ttk

《tkinter實用教程三》tkinter Button 控件

《tkinter實用教程四》tkinter 布局管理 Grid

《tkinter實用教程五》tkinter ttk.Frame控件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM