Tkinter 元件詳解之Label

Label(標籤)元件用於在螢幕上顯示文字或影象。Label 元件僅能顯示單一字型的文字,但文字可以跨越多行。另外,還可以為其中的個別字元加上下劃線(例如用於表示鍵盤快捷鍵)。

何時使用 Label 元件?

Label 元件用於顯示文字和影象,並且使用雙緩衝,這樣你就可以隨時更新內容,沒有惱人的閃爍。

如果希望顯示的資料使用者可以進行操作,使用 Canvas 元件或許更為合適。

用法

使用 Label 元件,你可以指定想要顯示的內容(可以是文字、點陣圖或者圖片):

import tkinter as tk

master = tk.Tk()

w = tk.Label(master, text="你好,來自江南的你!")
w.pack()

master.mainloop()

如果你沒有指定 Label 的大小,那麼 Label 的尺寸是正好可以容納其內容而已,如下:

當然你可以通過 height 和 width 選項來明確設定 Label 的大小:如果你顯示的是文字,那麼這兩個選項是以文字單元為單位定義 Label 的大小;如果你顯示的是點陣圖或者影象,那麼它們以畫素為單位(或者其他螢幕單元)定義 Label 大小。

你可以通過 foreground(或 fg)和 background(或 bg)選項來設定 Label 的前景色和背景色。你也可以選擇 Label 中的文字用哪種字型來顯示。指定顏色和字型時需謹慎,除非你有一個很好的理由,否則建議使用預設值(主要是考慮到不同平臺的相容性)。

w = tk.Label(master, text="你好,來自江南的你", font=("華文行楷", 20), fg="green")

注:你還可以使用 #RRGGBB 的格式指定具體的顏色值,例如 "#%02x%02x%02x" % (123, 188, 233)

Label 可以顯示多行文字,你可以直接使用換行符或使用 wraplength 選項來實現。當文字換行的時候,你可以使用 anchor 和 justify 選項來使得文字如你所希望的顯示出來:

longtext = """
Label 可以顯示多行文字,你可以直接使用換行符
或使用 wraplength 選項來實現。當文字換行的時
候,你可以使用 anchor 和 justify 選項來使得
文字如你所希望的顯示出來。
"""
w = tk.Label(master, text=longtext, anchor="w", justify="left")

Label 可以顯示 Tkinter 變數的內容。言下之意就是當變數的內容發生改變時,Label 中顯示的內容也會自動更新:

v = tk.StringVar()
w = tk.Label(master, textvariable=v)
v.set("~新的文字~")
w.pack()

你可以使用 Label 顯示 PhotoImage 和 BitmapImage 物件。當你這麼做的時候,請務必保留一份圖片物件的引用,以防止被 Python 的垃圾回收機制回收。你可以使用一個全域性變數,或一個例項的屬性,或者再簡單點,在例項上新增一個屬性即可:

photo = tk.PhotoImage(file="python.gif")
w = tk.Label(master, image=photo)
w.pack()

引數

Label(master=None, **options) (class)

master -- 父元件

**options -- 元件選項,下方表格詳細列舉了各個選項的具體含義和用法:
 

選項 含義
activebackground 1. 設定當 Label 處於活動狀態(通過 state 選項設定狀態)的背景色
2. 預設值由系統指定
activeforeground 1. 設定當 Label 處於活動狀態(通過 state 選項設定狀態)的前景色
2. 預設值由系統指定
anchor 1. 控制文字(或影象)在 Label 中顯示的位置
2. "n", "ne", "e", "se", "s", "sw", "w", "nw", 或者 "center" 來定位(ewsn 代表東西南北,上北下南左西右東)
3. 預設值是 "center"
background 1. 設定背景顏色
2. 預設值由系統指定
bg 跟 background 一樣
bitmap 1. 指定顯示到 Label 上的點陣圖
2. 如果指定了 image 選項,則該選項被忽略
borderwidth 1. 指定 Label 的邊框寬度
2. 預設值由系統指定,通常是 1 或 2 畫素
bd 跟 borderwidth 一樣
compound 1. 控制 Label 中文字和影象的混合模式
2. 預設情況下,如果有指定點陣圖或圖片,則不顯示文字
3. 如果該選項設定為 "center",文字顯示在影象上(文字重疊影象)
4. 如果該選項設定為 "bottom","left","right" 或 "top",那麼影象顯示在文字的旁邊(如 "bottom",則影象在文字的下方)
5. 預設值是 NONE
cursor 1. 指定當滑鼠在 Label 上飄過的時候的滑鼠樣式
2. 預設值由系統指定
disabledforeground 1. 指定當 Label 不可用的時候前景色的顏色
2. 預設值由系統指定
font 1. 指定 Label 中文字的字型(注:如果同時設定字型和大小,應該用元組包起來,如("楷體", 20)
2. 一個 Label 只能設定一種字型
3. 預設值由系統指定
foreground 1. 設定 Label 的文字和點陣圖的顏色
2. 預設值由系統指定
fg 跟 foreground 一樣
height 1. 設定 Label 的高度
2. 如果 Label 顯示的是文字,那麼單位是文字單元
3. 如果 Label 顯示的是影象,那麼單位是畫素(或螢幕單元)
4. 如果設定為 0 或者乾脆不設定,那麼會自動根據 Label 的內容計算出高度
highlightbackground 1. 指定當 Label 沒有獲得焦點的時候高亮邊框的顏色
2. 預設值由系統指定,通常是標準背景顏色
highlightcolor 1. 指定當 Label 獲得焦點的時候高亮邊框的顏色
2. 預設值由系統指定
highlightthickness 1. 指定高亮邊框的寬度
2. 預設值是 0(不帶高亮邊框)
image 1. 指定 Label 顯示的圖片
2. 該值應該是 PhotoImage,BitmapImage,或者能相容的物件
3. 該選項優先於 text 和 bitmap 選項
justify 1. 定義如何對齊多行文字
2. 使用 "left","right" 或 "center"
3. 注意,文字的位置取決於 anchor 選項
4. 預設值是 "center"
padx 1. 指定 Label 水平方向上的額外間距(內容和邊框間)
2. 單位是畫素
pady 1. 指定 Label 垂直方向上的額外間距(內容和邊框間)
2. 單位是畫素
relief 1. 指定邊框樣式
2. 預設值是 "flat"
3. 另外你還可以設定 "groove", "raised", "ridge", "solid" 或者 "sunken"
state 1. 指定 Label 的狀態
2. 這個標籤控制 Label 如何顯示
3. 預設值是 "normal
4. 另外你還可以設定 "active" 或 "disabled"
takefocus 1. 如果是 True,該 Label 接受輸入焦點
2. 預設值是 False
text 1. 指定 Label 顯示的文字
2. 文字可以包含換行符
3. 如果設定了 bitmap 或 image 選項,該選項則被忽略
textvariable 1. Label 顯示 Tkinter 變數(通常是一個 StringVar 變數)的內容
2. 如果變數被修改,Label 的文字會自動更新
underline 1. 跟 text 選項一起使用,用於指定哪一個字元畫下劃線(例如用於表示鍵盤快捷鍵) 
2. 預設值是 -1
3. 例如設定為 1,則說明在 Button 的第 2 個字元處畫下劃線
width 1. 設定 Label 的寬度
2. 如果 Label 顯示的是文字,那麼單位是文字單元
3. 如果 Label 顯示的是影象,那麼單位是畫素(或螢幕單元)
4. 如果設定為 0 或者乾脆不設定,那麼會自動根據 Label 的內容計算出寬度
wraplength 1. 決定 Label 的文字應該被分成多少行
2. 該選項指定每行的長度,單位是螢幕單元
3. 預設值是 0