Button 按鈕
Button 是 tkinter 裡用來可以跟使用者滑鼠互動的按鈕物件,這篇教學會介紹如何在 tkinter 視窗裡加入 Button 按鈕,並實作一些簡單的點擊按鈕進行互動的程式。
快速導覽:
因為 Google Colab 不支援 tkinter,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda )。
加入 Button 按鈕
建立 tkinter 視窗物件後,透過 Button 方法,就能在視窗物件中建立 Button 按鈕,必要的參數有兩個,第一個表示要加入的視窗物件,第二個則是標籤參數 ( 通常是文字 text、圖片 image ),建立 Button 按鈕後再使用 pack() 方法將其加入 ( 參考 pack 參數設定 ),下方的程式碼執行後,會在視窗裡加入一個按鈕 ( 位置、大小和顏色都使用預設值 )。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
btn = tk.Button(root, text='我是按鈕') # 建立 Button 按鈕
btn.pack() # 加入視窗中
# tk.Button(root, text='我是按鈕').pack() # 如果不使用變數,也可使用這種做法
root.mainloop()
Button 按鈕參數設定
加入 Button 之後,可以透過 Button 的參數調整內容的樣式,下方列出 Button 和其他元件相同的參數:
參數 | 說明 |
---|---|
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。 |
下方是 Button 按鈕行為相關的參數:
參數 | 說明 |
---|---|
command | 按下按鈕要執行的函式。 |
activeforeground | 按下按鈕時的按鈕文字顏色。 |
state | 按鈕狀態,tk.NORMAL 可使用 ( 預設 )、tk.DISABLED 不可使用。 |
設定 Button 按鈕樣式樣式
下方的程式碼設定 Button 按鈕的 font、padx、pady、activeforeground 參數,就能調整按鈕相關樣式 ( 點擊按鈕時,按鈕文字會變成紅色 )。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
btn = tk.Button(root,
text='我是按鈕',
font=('Arial',30,'bold'),
padx=10,
pady=10,
activeforeground='#f00'
)
btn.pack()
root.mainloop()
點擊按鈕累積數字
參考「Label 使用文字變數」,設定文字變數 a 以及全域變數 n,並定義一個函式 add,每次執行 add 函式時將 n 增加 1,並更新變數 a 的內容,最後設定 Button 的 command 參數為 add ( 表示點擊按鈕時執行 add )。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
n = 0 # n 等於 0
a = tk.StringVar() # 設定 a 為文字變數
a.set(n) # 設定 a 的內容
def add():
global n # n 是全域變數
n = n + 1 # 每次執行 add 時將 n 增加 1
a.set(n) # 設定 a 的內容
mylabel = tk.Label(root, textvariable=a, font=('Arial',20)) # 放入標籤
mylabel.pack()
# Button 設定 command 參數
btn = tk.Button(root,
text='我是按鈕',
font=('Arial',30,'bold'),
command=add
)
btn.pack()
root.mainloop()
invoke() 調用按鈕
建立 Button 按鈕之後,可以使用 invoke() 方法調用按鈕,也就是執行 invoke() 之後等同按下該顆按鈕,以上面點擊按鈕增加數字的程式為例,如果在最後加上一個重複四次的 for 迴圈使用四次 invoke(),視窗開啟後就會看見數字從 4 開始 ( 因為很快速的點擊四下 )。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
n = 0 # n 等於 0
a = tk.StringVar() # 設定 a 為文字變數
a.set(n) # 設定 a 的內容
def add():
global n # n 是全域變數
n = n + 1 # 每次執行 add 時將 n 增加 1
a.set(n) # 設定 a 的內容
mylabel = tk.Label(root, textvariable=a, font=('Arial',20)) # 放入標籤
mylabel.pack()
# Button 設定 command 參數
btn = tk.Button(root,
text='我是按鈕',
font=('Arial',30,'bold'),
command=add
)
btn.pack()
for i in range(4):
btn.invoke()
root.mainloop()
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~