程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python tkinter - 第五章 按鈕控件(Button)屬性

編輯:Python

第5章 按鈕控件(Button)
5.1 按鈕控件介紹
按鈕是一個標准的tkinter控件。按鈕上可以顯示文字或者圖片作為提示信息。文字只能使用一種字體以及顏色。按鈕的最主要作用是被點擊後,可以調用指定的回調函數,完成特定的功能。比如,關閉窗口、執行命令等。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Button(root,text="Quit",command=root.destroy)
b1.pack()
root.mainloop()

結果:

這個小程序展示了按鈕控件的基本功能。點擊按鈕後,回調設定好的函數。本程序的功能是退出應用,並關閉窗口。
5.2 按鈕的屬性
按鈕控件的屬性如下:

屬性描述activebackground按鈕按下時背景顏色。默認是系統指定的顏色。activeforeground按鈕按下時前景顏色。默認是系統指定的顏色。anchor采用何種方式錨定文字或者圖片。默認是CENTER(居中模式)。可以選擇如下方式:
N, NE, E, SE, S, SW, W, NW, or CENTER.background
bg按鈕的背景顏色。默認是系統指定顏色bitmapbitmap形式顯示按鍵。如果設置了images屬性,則忽略bitmap屬性。borderwidth
bd按鈕的邊緣寬度。一般是1~2個像素值。command設置回調函數。當按鈕被按下時,會調用該函數。如果該屬性沒有設置,按下按鈕時,不會有任何動作發生。compound在按鈕上同時顯示文字和圖片。默認的模式是如果提供了圖片,會只顯示圖片。但是,如果將選項設為:
CENTER:在圖片中間疊加顯示文字
BOTTOM:在圖片下方顯示文字
LEFT:在圖片左邊顯示文字
RIGHT:在圖片右邊顯示文字
TOP:在圖片頂部顯示文字
NONE:不顯示文字cursor當鼠標移動經過按鈕的時候,顯示光標default取值有normal,active和disabled三個。disabledforeground按鈕被禁止使用時,按時上的文字的顏色font按鈕上文字的字體。只能選擇一種字體顯示。foreground
fg按鈕上文字或者位圖的顏色height設置按鈕的高度。如果是顯示文字,數值是文字單位。如果是顯示圖片,數值單位為像素。如果沒有設置,系統自動計算按鈕的高度。highlightbackground當按鈕失去焦點的時候,顯示按鈕邊框的高亮顏色highlightcolor當按鈕獲得焦點的時候,顯示按鈕邊框的高亮顏色highlightthickness設置高亮邊框的寬度image設置按鈕顯示的圖片。如果該選項被設置,會取代text或bitmap選項。justify當按鈕有多行文字時,設置文字的對齊方式。可設的數值有:
LEFT,RIGHT,CENTERoverrelief當鼠標移動經過的時候,按鈕顯示浮雕效果。如果沒有設定,會使用relief中的值。padx在水平方向上,按鈕邊框和文字或圖像之間的填充(pad)pady在垂直方向上,按鈕邊框和文字或圖像之間的填充(pad)relief按鈕3D美化效果。通常情況下,按鈕被按下時,是SUNKEN效果,釋放時是RAISED效果。其他的可選項包括:GROOVE,RIDGE以及FLATstate按鈕的狀態,包括:NORMAL, ACTIVE 或者 DISABLEDtakefocus標識用戶是否能夠使用Tab鍵選中按鈕。取值是True,False或者Nonetext顯示在按鈕上的文字。如果使用了bitmap或者image,該選項被忽略textvariable將tkinter變量與按鈕相關聯。如果變量的內容發生變化,按鈕的文字也隨之更新。underline標識在那個字符下顯示下劃線。默認值是-1,標識沒有字符下面顯示下劃線width設置按鈕的寬度。參考height屬性wraplength確定按鈕上文字超過多長時,文字會被折疊成多行。單位是像素。默認值是0.

5.2.1 activebackground 和activeforeground

定義按鈕在ACTIVE狀態時,背景顏色和文字的顏色。這兩個屬性可以用來突出顯示文本,或者某些特殊效果。
代碼
import tkinter as tk
root=tk.Tk()
root.geometry(‘300x240’)
b1 = tk.Button(root,text=“Quit”,activebackground=‘blue’,
activeforeground=‘yellow’,command=root.destroy)
b1.pack()
root.mainloop()
結果:

5.2.2 anchor
anchor的作用是如何控制文字的顯示。參見3.3.4節。看下面anchor=tk.SW的例子。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='Quit',anchor=tk.SW,
height=5,width=20,command=root.destroy)
b1.pack()
root.mainloop()

結果:

按鈕上的文字,不是通常的居中顯示,而是顯示在左下角了。這就是anchor的作用。
5.2.3 background(bg)
設置按鈕的背景顏色。bg是縮寫格式。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='Quit',height=3,width=20,
bg='yellow',command=root.destroy)
b1.pack()
root.mainloop()

結果:

說明:背景的顏色被設置為黃色。
5.2.4 bitmap
在按鈕上顯示圖片。這個bitmap不是windows系統中的常用的bitmap。不建議使用bitmap。如果是要使用圖片,可以使用image屬性來設置,支持gif、png等常見的格式。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,bitmap='@x.xbm',
bg='yellow', command=root.destroy)
b1.pack()
root.mainloop()

結果:

5.2.5 borderwidth(bd)
定義按鈕的邊框寬度。bd是縮寫格式。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='退出',height=3,width=20,
bd=10,bg='yellow',command=root.destroy)
b1.pack()
root.mainloop()

結果:

5.2.6 command
command是用來設定回調函數的,也就是說按下按鈕後,調用特定的函數實現一定的功能。以前的例子只是簡單的調用系統的destroy()函數,在真正的使用中,肯定是要調用比較復雜的函數的。
其中一個關鍵的問題就是參數傳遞了。在command中,是沒有括號的,是不能顯式的把參數傳遞給回調函數的。這麼做的重要原因就是,在按鈕實例化的時候,就把參數傳遞給回調函數是沒有意義的。回調函數的參數應該在程序中動態的確認,而不是簡單的在實例化的時候就確認了。
那麼如何傳遞參數給回調函數呢?一個簡單的方法就是使用全局變量。但是這個方法不是最好的。全局變量多了,對程序的可維護性是一種破壞,也會帶來潛在的bug。
第二種方法是使用類。把回調函數以及相應的參數都定義在類裡面,使用類的內部變量,可以減少對其他程序的影響。這種方法使用是最普遍的。

還有一種方法是使用匿名函數lambda的方法。lambda可以讓開發人員定義簡單的函數而不用起名字。比如:
a=lambda x,y,z:xyz
print(a(1,2,3))

得到的結果是123=6。在按鈕的回調函數中,也可以定義類似的匿名回調函數,從而滿足傳遞參數的功能。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b2=tk.Label(root,text='測試文本')
b2.pack()
b3 = tk.Entry(root,width=20)
b3.pack()
def change_b2(label,text):
label['text']=text.get()
b1=tk.Button(root,text='改變標簽文字',height=3,
width=20,bg='yellow',
command=lambda :change_b2(b2,b3))
b1.pack()
root.mainloop()

結果:


可以看到,使用lambda可以直接把參數傳遞給回調函數。其實實現的機制是按鈕是把lambda當成回調函數,不過實際調用的時候,替換為我們期望的處理函數。

5.2.7 compound
見第四章關於compound用法的說明。
5.2.8 cursor
鼠標經過按鈕時,顯示的光標。光標形狀說明3.3.6節。
5.2.9 default
取值為ACTIVE,NORMAL和DISABLED。
5.2.10 disabledforeground
按鈕被禁止使用時,按鈕上的文本的顏色。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='禁止使用按鈕',
height=3,width=20,state=tk.DISABLED,
disabledforeground='blue',
command=root.destroy)
b1.pack()
root.mainloop()

結果:

5.2.11 font
設置按鈕上文本的字體,參見3.3.3節的說明。
5.2.12 foreground 和fg
設置按鈕上的文本的顏色。這個是按鈕的狀態為正常的情況下的文本顏色。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='正常按鈕',
height=3,width=20,
fg='yellow',
command=root.destroy)
b1.pack()
root.mainloop()

結果:

5.2.13 highlightbackground,highlightcolor和highlightthickness
分別對應按鈕沒有獲得焦點時邊框的顏色(highlightbackground)、按鈕獲得焦點時邊框的顏色(highlightcolor)以及邊框的寬度(highlightthickness)。不過對於按鈕控件而言,這三個參數不起作用。
5.2.14 image
在按鈕上顯示圖片。當使用image屬性時,text與bitmap屬性會被屏蔽。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
p = tk.PhotoImage(file="a.gif")
b1=tk.Button(root,height=80,width=100,
image=p,command=root.destroy)
b1.pack()
root.mainloop()

結果:

5.2.15 justify
按鈕上顯示多行文本時的對齊方式。具體的說明見第四章。
5.2.16 overrelief
設置鼠標經過按鈕時的3D效果。取值與relief一樣。當鼠標指針位於按鈕區域時,會根據設置顯示對應的3D效果

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,height=4,width=10,text='退出',
bd=10,command=root.destroy,
overrelief='sunken')
b1.pack()
root.mainloop()

結果:


當鼠標移動到按鈕的上方,會改變3D外觀。
5.2.17 padx 和 pady
文字或者圖像與按鈕邊框之間的內邊距。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='退出',
padx=10,pady=10,command=root.destroy)
b1.pack()
b2=tk.Button(root,text='退出',
command=root.destroy)
b2.pack()
root.mainloop()

結果:

第一個按鈕就是設置了padx和pady的效果。而第二個按鈕沒有設置padx和pady。可以發現第一個按鈕的文字距離邊框比第二個要遠一些。這就是padx和pady的作用。
5.2.18 relief
按鈕的3D效果。在一般的情況下,按鈕按下時是sunken效果,釋放時時raised效果。可以通過設置此屬性改變按鈕釋放時的效果,但是並不影響按下時的效果。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='退出',bd=10,
command=root.destroy,relief='solid')
b1.pack()
root.mainloop()

結果:

5.2.19 state
設置按鈕的狀態。狀態有三種:NORMAL,ACTIVE和DISABLED。NORMAL和ACTIVE的作用是一樣的,按鈕都可以正常使用。而DISABLED會禁止按鈕的使用,按鈕會灰化,並且無法按下。具體的用法見5.2.10中的例子。

5.2.20 takefocus
設定是否可以使用Tab來選中按鈕。True為可以使用Tab鍵選中,False為不能。下面的代碼就是可以選中的例子。被Tab選中的按鈕,會有一個虛框出現在按鈕上。此時按動空格鍵,就可以激活該按鈕的功能。如果沒有這個虛框,就只能用鼠標點擊來激活按鈕的功能了。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='退出',bd=5,
command=root.destroy,takefocus=True)
b1.pack()
root.mainloop()

結果:

5.2.21 text
用來設定按鈕上的文字。前面很多章節都有使用的例子了,這裡不再贅述了。
5.2.22 textvariable
用來改變按鈕上的文字。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
btn_text=tk.StringVar()
def btn_change():
btn_text.set('改變文字')
btn_text.set('退出')
b1=tk.Button(root,bd=5, command=btn_change,
textvariable=btn_text)
b1.pack()
root.mainloop()

結果:


5.2.23 underline
標識在那個字母下面有下劃線。對中文也有效。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,bd=5, command=root.destroy,
text='退出',underline=1)
b1.pack()
root.mainloop()

結果:

5.2.24 width和height
設定按鈕的寬度。對於文字是按照文字的寬度,而對於圖像則是以像素為單位。具體的用法見前面的章節的例子。

5.2.25 wraplength
和第四章中的wraplength一樣的用法,可參照。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved