Label 標籤
Label 是 tkinter 裡用來建立文字或圖片的標籤物件,這篇教學會介紹如何在 tkinter 視窗裡加入 Label 標籤,並進行像是文字字型、大小、顏色和位置...等參數設定。
快速導覽:
因為 Google Colab 不支援 tkinter,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda )。
加入 Label 標籤
建立 tkinter 視窗物件後,透過 Label 方法,就能在視窗物件中建立 label 標籤,必要的參數有兩個,第一個表示要加入的視窗物件,第二個則是標籤參數 ( 通常是文字 text、圖片 image ),建立 label 標籤後再使用 pack() 方法將其加入 ( 參考 pack 參數設定 ),下方的程式碼執行後,會在視窗裡加入一段 hello world 的文字 ( 位置、大小和顏色都使用預設值 )。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
mylabel = tk.Label(root, text='hello world') # 建立 label 標籤
mylabel.pack() # 加入視窗中
# tk.Label(root, text='hello world').pack() # 如果不使用變數,也可使用這種做法
root.mainloop()
Label 標籤參數設定
加入 Label 之後,可以透過 Label 的參數調整內容的樣式,下方列出 Label 和其他元件相同的參數:
參數 | 說明 |
---|---|
anchor | 擺放位置,可以設定 n、s、w、e、ne、nw、sw、se、center ( e 右,w 左,s 下,n 上 ),預設 center。 |
text | 文字內容,可以使用換行符 ( \n )。 |
width | 寬度,單位是字元數,預設 0。 |
height | 高度,單位是字元數,預設 0。 |
padx | 內容和標籤左右邊界的間距 ( px ),預設 1。 |
pady | 內容和標籤上下邊界的間距 ( px ),預設 1。 |
bg/background | 背景顏色,可以使用十六進位色碼或顏色名稱。 |
fg/foreground | 文字顏色,可以使用十六進位色碼或顏色名稱。 |
font | 字型設定,包含字體、大小 ( px )、粗體 ( bold )、斜體 ( italic )。 |
justify | 多行文字的對齊方式,可以設定 left、right、center,預設 center。 |
cursor | 滑鼠移動到標籤的樣式,可以設定 arrow、circle、cross、plus...等,預設 arrow。 |
relief | 邊框樣式,可以設定 flat、sunken、raised、groove、ridge、solid,預設 flat。 |
bd/borderwidth | 邊框粗細,預設 1。 |
textvariable | 文字內容的變數名稱,如果變數被修改,文字就會發生變化。 |
underline | 第幾個字元開始加底線 ( 0 為第一個字元, 預設 -1 不加底線 )。 |
wraplength | 一段文字超過多少寬度 ( px ) 會換行。 |
image | 圖片內容。 |
bitmap | 使用 bitmap 圖示作為標籤內容。 |
compound | 設定文字與圖片排列的方式,可以設定 none、center、top、bottom、left、right,預設 none。 |
設定 Label 文字樣式
設定 Label 標籤的 font 和 fg 參數,就能調整文字的顏色、字體、和字型大小...等樣式。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
mylabel = tk.Label(root,
text='hello world\n大家好',
font=('Arial',20,'bold'),
fg='#f00')
mylabel.pack()
root.mainloop()
加入 bitmap 圖示
各個作業系統裡,都有一些固定的系統 bitmap 名稱可以使用,只要將 Label 裡 bitmap 參數設定為對應的名稱,就可以顯示該 bitmap,下方列出常用的 bitmap 名稱:
名稱 | 說明 |
---|---|
error | 錯誤 |
hourglass | 沙漏 |
info | 訊息 |
questhead | 人頭裡有問號 |
question | 問號 |
warning | 驚嘆號 |
gray12 | 淺灰色 |
gray25 | 淺中灰色 |
gray50 | 中灰色 |
gray75 | 身灰色 |
下面的程式碼執行後,會在視窗裡產生十個 Label,每個 Label 都有一個 bitmap 圖示。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x250')
tk.Label(root, bitmap='error').pack()
tk.Label(root, bitmap='hourglass').pack()
tk.Label(root, bitmap='info').pack()
tk.Label(root, bitmap='questhead').pack()
tk.Label(root, bitmap='question').pack()
tk.Label(root, bitmap='warning').pack()
tk.Label(root, bitmap='gray12').pack()
tk.Label(root, bitmap='gray25').pack()
tk.Label(root, bitmap='gray50').pack()
tk.Label(root, bitmap='gray75').pack()
root.mainloop()
如果要同時顯示文字與 bitmap,可以額外添加 compound 參數,指定 bitmap 要出現在文字的哪個位置,如果不設定 compound 參數,則不會顯示文字,只會顯示 bitmap。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
mylabel = tk.Label(root,
text='hello world\n大家好',
font=('Arial',20,'bold'),
fg='#f00',
bitmap='info',
compound='left')
mylabel.pack()
root.mainloop()
設定 Label 樣式
下方的程式碼設定了 bg、relief、pady 和 padx 參數,就能產生不同樣式的 Label 標籤。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
mylabel = tk.Label(root,
text='hello world\n大家好',
font=('Arial',20,'bold'),
fg='#fff',
bg='#f50',
relief='groove',
pady=20,
padx=20)
mylabel.pack()
root.mainloop()
使用文字變數
如果要使用 textvariable 參數讀取外部變數內容,則需要先利用 StringVar() 建立 tkinter 文字變數,並透過 set 方法提供變數內容,就可以使用 textvariable 參數讀取。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
a = tk.StringVar() # 建立文字變數
a.set('hello') # 設定內容
mylabel = tk.Label(root, textvariable=a, font=('Arial',20)) # 內容是 a 變數
mylabe.pack()
root.mainloop()
pack 參數設定
標籤建立完成後,會使用 pack() 方法將其添加至視窗中,pack() 方法本身也可以設定一些參數,這些參數可以決定放置的位置和邊界,相關參數如下:
參數 | 說明 |
---|---|
side | Label 靠近視窗的哪邊,可以設定 top、left、bottom 和 right,預設 right。 |
fill | Label 與視窗的大小關係,可以設定 none、x ( 水平填滿 )、y ( 垂直填滿 ) 和 both ( 水平垂直都填滿 ),預設 none。 |
anchor | Label 在視窗中的錨點位置,可以設定 n、s、w、e、ne、nw、sw、se、center ( e 右,w 左,s 下,n 上 ),預設 center。 |
padx | Label 與視窗的水平間距。 |
pady | Label 與視窗的垂直間距。 |
下方的程式碼執行後,會將一個標籤放在視窗的右上方,並與視窗有著 20 的邊界。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
img = tk.PhotoImage(file='test2.png')
mylabel = tk.Label(root,
text='hello world\n大家好',
font=('Arial',20,'bold'),
bg='#ff0')
mylabel.pack(side='right', padx=20, pady=20,anchor='nw')
root.mainloop()
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~