Tkinter 教程 - 按鈕
Tkinter 按鈕控制元件 Button
Tkinter 按鈕控制元件 Button
與 Tkinter 標籤非常相似。它和 Tkinter 標籤具有幾乎相同的選項,除了它有一個額外的預設 default
選項。我們將在演示完基本按鈕例子之後,再回到這個預設選項 default
的詳細資訊。
下面的程式碼生成了兩個非常簡單的按鈕。
from sys import version_info
if version_info.major == 2:
import Tkinter as tk
elif version_info.major == 3:
import tkinter as tk
app = tk.Tk()
button1 = tk.Button(app, text="Python Label 1")
button2 = tk.Button(app, text="Python Label 2")
button1.pack(side=tk.LEFT)
button2.pack(side=tk.LEFT)
app.mainloop()
在你執行程式碼後,會在視窗中顯示出兩個彼此相鄰的按鈕。
Tkinter 按鈕預設選項 default
按鈕中的預設選項 default
通知 GUI,該按鈕是 GUI 中的預設按鈕。或者用一句簡單的話來說,當使用者按確認或回車鍵時,會自動調該按鈕。
Tkinter 按鈕回撥命令
當使用者按下按鈕時,command
選項會呼叫回撥函式。
command
選項啟用時,按鈕狀態應該處於活動狀態,否則,Tkinter 不會呼叫回撥函式。from sys import version_info
if version_info.major == 2:
import Tkinter as tk
elif version_info.major == 3:
import tkinter as tk
app = tk.Tk()
labelExample = tk.Button(app, text="0")
def change_label_number():
counter = int(str(labelExample['text']))
counter += 1
labelExample.config(text=str(counter))
buttonExample = tk.Button(app, text="Increase", width=30,
command=change_label_number)
buttonExample.pack()
labelExample.pack()
app.mainloop()
它在主視窗中建立了一個按鈕和一個標籤控制元件。當你每次單擊按鈕時,標籤文字中的數字都會加 1。
def change_label_number():
counter = int(str(labelExample['text']))
counter += 1
labelExample.config(text=str(counter))
change_label_number
是單擊按鈕時被呼叫的回撥函式。該函式讀取標籤所顯示的數字,數字加 1 後再將新數字設定為標籤文字。
buttonExample = tk.Button(app, text="Increase", width=30,
command=change_label_number)
這句話繫結按鈕和回撥函式 change_label_number
。
帶引數的命令回撥函式
如果回撥函式需要輸入引數,我們則需要 functools
中的 partial
物件。partial
物件是帶有位置引數 args
和關鍵字引數 keywords
的可呼叫物件。
下面的程式碼片段演示瞭如何在按鈕命令中使用這個 partial
功能。
def change_label_number(num):
counter = int(str(labelExample['text']))
counter += num
labelExample.config(text=str(counter))
buttonExample = tk.Button(app, text="Increase", width=30,
command=partial(change_label_number, 2))
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn