天天看點

Python ---(二)Tkinter視窗元件:Button

The Tkinter Button Widget

##簡介

Button(按鈕)元件用于實作各種各樣的按鈕。Button 元件可以包含文本或圖像,你可以将一個 Python 的函數或方法與之相關聯,當按鈕被按下時,對應的函數或方法将被自動執行。

Button 元件僅能顯示單一字型的文本,但文本可以跨越多行。另外,還可以為其中的個别字元加上下劃線(例如用于表示鍵盤快捷鍵)。預設情況下,tab 按鍵被用于在按鈕間切換。

##何時使用 Button 元件?

簡而言之,Button 元件是用于讓使用者說:“幹!”,通過按鈕上的文字或圖示讓使用者清楚按下去是幹什麼用的。Button 元件常常被用于工具欄、應用程式視窗、和表示接受或拒絕的對話框。Checkbutton 和 Radiobutton 元件更适合做資料輸入按鈕使用

##用法

普通的按鈕是非常簡單易用的。你所需要做的就是指定 Button 的内容(文本、位圖或者圖檔),并且關聯當按鈕被按下時應該調用的函數或方法:

import tkinter as tk

master = tk.Tk()

def callback():

print("我被調用了!")

b = tk.Button(master, text="執行", command=callback)

b.pack()

master.mainloop()

Python ---(二)Tkinter視窗元件:Button
Python ---(二)Tkinter視窗元件:Button

如果一個按鈕沒有相關聯的函數或方法,那麼它就形同虛設。你可能在開發程式的過程中會使用到這樣的按鈕,在這種情況下,更好的方法是禁用這些按鈕,進而避免導緻你的測試使用者産生疑惑。

b = tk.Button(master, text="不執行", state="disabled")

Python ---(二)Tkinter視窗元件:Button

如果你沒有指定 Label 的大小,那麼 Label 的尺寸是正好可以容納其内容而已。你可以使用 padx 和 pady 選項在 Button 的内容和邊框間添加額外的間距。

當然你可以通過 height 和 width 選項來明确設定 Button 的大小:如果你顯示的是文本,那麼這兩個選項是以文本單元為機關定義 Button 的大小;如果你顯示的是位圖或者圖像,那麼它們以像素為機關(或者其他螢幕單元)定義 Button 大小。

對于内容為文本的 Button 元件,你可以使用像素為機關指定 Buttton 的尺寸,不過這需要一些技巧。這裡提供一個方法給大家參考(還有其它方法實作):

f = tk.Frame(master, height=64, width=64)

f.pack_propagate(0)

f.pack()

b = tk.Button(f, text="确定", command=callback)

b.pack(fill="both", expand=1)

Python ---(二)Tkinter視窗元件:Button

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

longtext = """

我明明隻是一個按鈕,

作為按鈕并不需要太多

的文字用于告訴使用者當

我被按下的時候會發生

什麼事情,但我為什麼

這麼長?

"""

b = tk.Button(master, text=longtext, anchor="w", justify="left", padx=2, command=callback)

Python ---(二)Tkinter視窗元件:Button

為了使一個普通的按鈕保持被“按下”的狀态,例如你希望通過某種方式實作一個工具箱(像 Photoshop 左側的工具欄按鈕,按下的時候他保持凹下去,說明你正在使用此工具),你可以簡單的将 relief 選項的預設值 “raised” 改為 “sunken”:

b.config(relief="sunken")

Python ---(二)Tkinter視窗元件:Button

你或許也希望修改背景色。不過更好的方法是使用 Checkbutton 和 Radiobutton 元件,并把它們的 indicatoron 選項設定為 False:

b = tk.Checkbutton(master, image=bold, variable=var, indicatoron=False)

在早期版本的 Tkinter 中,image 選項會覆寫 text 選項。也就是說如果你同時指定了兩個選項,那麼隻有 image 選項會被顯示。但在新的 Tkinter 中,你可以使用 compound 選項設定二者的混合模式。例如下邊就是通過設定 compound=“center” 使得文字位于圖檔的上方(重疊顯示):

photo = tk.PhotoImage(file = 'botton.gif')

b = tk.Button(master, text="點我", font = 20, image = photo, compound = "center")

Python ---(二)Tkinter視窗元件:Button

通過 “left”,“right”,“top” 和 “bottom” 則可以設定文字在圖像的旁邊顯示:

b = tk.Button(master, text="點它 ->", font = 20, image = photo, compound = "right")

Python ---(二)Tkinter視窗元件:Button

##參數

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

master – 父元件

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

選項 含義
activebackground

1. 設定當 Button 處于活動狀态(通過 state 選項設定狀态)的背景色

2. 預設值由系統指定

activeforeground 1. 設定當 Button 處于活動狀态(通過 state 選項設定狀态)的前景色
anchor

1. 控制文本(或圖像)在 Button 中顯示的位置

2. "n", "ne", "e", "se", "s", "sw", "w", "nw", 或者 "center" 來定位(ewsn 代表東西南北,上北下南左西右東)

3. 預設值是 "center"

background 1. 設定背景顔色
bg 跟 background 一樣
bitmap

1. 指定顯示到 Button 上的位圖

2. 如果指定了 image 選項,則該選項被忽略

borderwidth

1. 指定 Button 的邊框寬度

2. 預設值由系統指定,通常是 1 或 2 像素

bd 跟 borderwidth 一樣
compound

1. 控制 Button 中文本和圖像的混合模式

2. 預設情況下,如果有指定位圖或圖檔,則不顯示文本

3. 如果該選項設定為 "center",文本顯示在圖像上(文本重疊圖像)

4. 如果該選項設定為 "bottom","left","right" 或 "top",那麼圖像顯示在文本的旁邊(如 "bottom",則圖像在文本的下方)

5. 預設值是 NONE

cursor 1. 指定當滑鼠在 Button 上飄過的時候的滑鼠樣式
default

1. 如果設定該選項("normal"),該按鈕會被繪制成預設按鈕

2. Tkinter 會根據平台的具體名額來繪制(通常就是繪制一個額外的邊框)

2. 預設值是 "disable"

disabledforeground 1. 指定當 Button 不可用的時候前景色的顔色
font

1. 指定 Button 中文本的字型

2. 一個 Button 隻能設定一種字型

3. 預設值由系統指定

foreground 1. 設定 Button 的文本和位圖的顔色
fg 跟 foreground 一樣
height

1. 設定 Button 的高度

2. 如果 Button 顯示的是文本,那麼機關是文本單元

3. 如果 Button 顯示的是圖像,那麼機關是像素(或螢幕單元)

4. 如果設定為 0 或者幹脆不設定,那麼會自動根據 Button 的内容計算出高度

highlightbackground 1. 指定當 Button 沒有獲得焦點的時候高亮邊框的顔色
highlightcolor 1. 指定當 Button 獲得焦點的時候高亮邊框的顔色
highlightthickness

1. 指定高亮邊框的寬度

2. 預設值是 0(不帶高亮邊框)

image

1. 指定 Button 顯示的圖檔

2. 該值應該是 PhotoImage,BitmapImage,或者能相容的對象

3. 該選項優先于 text 和 bitmap 選項

justify

1. 定義如何對齊多行文本

2. 使用 "left","right" 或 "center"

3. 注意,文本的位置取決于 anchor 選項

4. 預設值是 "center"

overrelief

1. 定義當滑鼠飄過時 Button 的樣式

2. 如果不設定,那麼總是使用 relief 選項指定的樣式

padx 指定 Button 水準方向上的額外間距(内容和邊框間)
pady 指定 Button 垂直方向上的額外間距(内容和邊框間)
relief

1. 指定邊框樣式

2. 通常當按鈕被按下時是 "sunken",其他時候是 "raised"

3. 另外你還可以設定 "groove"、"ridge" 或 "flat"

4. 預設值是 "raised"

repeatdelay 見下方 repeatinterval 選項的描述
repeatinterval

1. 通常當使用者滑鼠按下按鈕并釋放的時候系統認為是一次點選動作。如果你希望當使用者持續按下按鈕的時候(沒有松開),根據一定的間隔多次觸發按鈕,那麼你可以設定這個選項。

2. 當使用者持續按下按鈕的時候,經過 repeatdelay 時間後,每 repeatinterval 間隔就觸發一次按鈕事件。

3. 例如設定 repeatdelay=1000,repeatinterval=300,則當使用者持續按下按鈕,在 1 秒的延遲後開始每 300 毫秒觸發一次按鈕事件,直到使用者釋放滑鼠。

state

1. 指定 Button 的狀态

2. 預設值是 "normal"

3. 另外你還可以設定 "active" 或 "disabled"

takefocus

1. 指定使用 Tab 鍵可以将焦點移到該 Button 元件上(這樣按下空格鍵也相當于觸發按鈕事件)

2. 預設是開啟的,可以将該選項設定為 False 避免焦點在此 Button 上

text

1. 指定 Button 顯示的文本

2. 文本可以包含換行符

3. 如果設定了 bitmap 或 image 選項,該選項則被忽略

textvariable

1. Button 顯示 Tkinter 變量(通常是一個 StringVar 變量)的内容

2. 如果變量被修改,Button 的文本會自動更新

underline

1. 跟 text 選項一起使用,用于指定哪一個字元畫下劃線(例如用于表示鍵盤快捷鍵) 

2. 預設值是 -1

3. 例如設定為 1,則說明在 Button 的第 2 個字元處畫下劃線

width

1. 設定 Button 的寬度

4. 如果設定為 0 或者幹脆不設定,那麼會自動根據 Button 的内容計算出寬度

wraplength

1. 決定 Button 的文本應該被分成多少行

2. 該選項指定每行的長度,機關是螢幕單元

3. 預設值是 0

##方法

— 重新整理 Button 元件,該方法将重繪 Button 元件若幹次(在 “active” 和 “normal” 狀态間切換)。

invoke()

— 調用 Button 中 command 選項指定的函數或方法,并傳回函數的傳回值。

— 如果 Button 的state(狀态)是 “disabled”(不可用)或沒有指定 command 選項,則該方法無效。

下一篇:Python —(三)Tkinter視窗元件:Checkbutton

轉載部落格:https://blog.csdn.net/w15977858408/article/details/104148047