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

Python tkinter - 第9章 多選按鈕控件(Checkbutton)屬性

編輯:Python

第9章 多選按鈕控件(Checkbutton)
多選按鈕控件,也叫檢查按鈕控件,是用於實現ON-OFF選擇的標准控件。多選按鈕的提示信息可以是文字,也可以是圖像。每個多選按鈕都可以設置獨立的回調函數,以實現特定的處理。也可以多個多選按鈕共同使用一個回調函數。
提示文本只能使用一種字體,但可以跨行顯示。與單選按鈕不一樣的是,每個多選按鈕需要與一個變量相關聯。 多選按鈕控件用於在兩個不同的值之間進行選擇(通常是打開或關閉功能)。
9.1 多選按鈕控件的屬性

選項描述activebackground當鼠標左鍵按下時,多選按鈕的背景色activeforeground當鼠標左鍵按下時,多選按鈕的前景色(文本顏色)anchor控制文本或者圖片如何擺放。可以使用的數值有:
N, NE, E, SE, S, SW, W, NW, or CENTER. 默認值是CENTER.backgroud
bg多選按鈕的背景色bitmap背景圖片borderwidth
bd邊框的大小,默認為 2 個像素command設置關聯的函數,當多選按鈕被點擊時,執行該函數cursor光標的形狀設定,如arrow, circle, cross, plus 等disabledforeground禁用多選按鈕時的前景色font設置文本字體foreground
fg多選按鈕的前景色(文本顏色)height多選按鈕的高度,默認為 1行。highlightcolor多選按鈕獲得輸入焦點時的高亮顏色highlightbackground多選按鈕失去輸入焦點時背景顏色highlightthickness獲得或者失去輸入焦點的高亮邊框寬度indicatoron控制indicator的狀態。默認是True。如果是False,則表示使用按壓式按鈕。image背景圖片justify顯示多行文本的時候,設置不同行之間的對齊方式,可選項包括LEFT, RIGHT, CENTERoffvalue多選按鈕的值不僅僅是 1 或 0,可以是其他類型的數值,可以通過 onvalue 和 offvalue 屬性設置 多選按鈕的狀態值。offrelief多選按鈕狀態為off時的修飾效果。默認值是RAISEDonvalue多選按鈕的值不僅僅是 1 或 0,可以是其他類型的數值,可以通過 onvalue 和 offvalue 屬性設置 多選按鈕的狀態值。overrelief鼠標位於多選按鈕上方時的顯示效果。padx多選按鈕在x軸方向上的內邊距(padding),默認為 1 個像素。pady多選按鈕在y軸方向上的內邊距(padding),默認為 1 個像素。relief設置顯示效果,就是控件的3D效果,可選的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默認為 FLAT。selectcolor指示符的背景顏色selectimage選中後的圖片state多選按鈕狀態,默認為 state=NORMALtext設置提示文本,使用 “\n” 來對文本進行換行。takefocus表示可以使用Tab鍵移動焦點到該多選按鈕。默認值是空字符串。textvariable關聯的tkinter變量,一般是StringVar類型。如果該變量改變,則這個按鈕的文本會更新。underline下劃線。默認提示文本都不帶下劃線。取值就是帶下劃線的字符串索引,從 0開始variable多選按鈕的變量,variable 的值為 1 或 0,代表著選中或不選中width默認寬度是多選按鈕的文本或圖像決定的,可以設置指定字符數。wraplength設置多選按鈕的折行顯示。單位是像素

9.1.1 activebackground 和activeforeground
activebackground是鼠標左鍵按下時,多選按鈕的背景顏色,鼠標鍵釋放後,恢復初始顏色。activeforeground是鼠標左鍵按下時,多選按鈕的文本顏色,鼠標鍵釋放後,恢復初始顏色

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,
text='選擇1',
activebackground='red',
activeforeground='yellow')
b1.pack()
root.mainloop()

結果:

9.1.2 anchor
用法和第八章的單選按鈕是一樣的。具體可以參考8.1.2節的說明。這裡只附上代碼和結果。

#pack 布局
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,
text='選擇1',anchor=tk.S+tk.W)
b1.pack(fill=tk.BOTH,expand=True)
root.mainloop()
#grid布局:
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
b1 = tk.Checkbutton(root,
text='選擇1',anchor=tk.S+tk.W)
b1.grid(row=0,column=0,sticky='nsew')
root.mainloop()

結果:


9.1.3 background(bg)
設置多選按鈕的背景顏色。bg是縮寫格式。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,text='紅色',bg='red')
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue')
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green')
b3.pack()
root.mainloop()

結果:

9.1.4 foreground(fg)
設置多選按鈕的提示文字顏色。fg是縮寫格式。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,
text='紅色',bg='red',fg='yellow')
b1.pack()
b2 = tk.Checkbutton(root,
text='藍色',bg='blue',fg='yellow')
b2.pack()
b3 = tk.Checkbutton(root,
text='綠色',bg='green',fg='yellow')
b3.pack()
root.mainloop()

結果:

9.1.5 font
設置多選按鈕提示文本的字體。一個多選按鈕只能設置一種字體。詳細的字體說明見3.3.3節。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,
text='紅色',fg='red',
font=('times',20,'bold'))
b1.pack()
root.mainloop()

結果:

9.1.6 image和bitmap
image和bitmap是兩種顯示圖片提示信息的方法。image是主要使用的。bitmap方法基本上已經很少用到。提示信息的優先級:image>bitmap>text

#image
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
aimage=tk.PhotoImage(file='a.gif')
b1 = tk.Checkbutton(root,image=aimage,bg='red')
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue')
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green')
b3.pack()
root.mainloop()
#bitmap
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,bitmap='error',bg='red')
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue')
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green')
b3.pack()
root.mainloop()

結果:


9.1.7 borderwidth(bd)
設置多選按的邊框寬度,默認單位是像素。其他的取值參見3.3.1節

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,text='邊框',bd=20)
b1.pack()
root.mainloop()

結果:


說明:圖一使用的默認值,圖二使用的是20個像素的邊框。可以看到有明顯的區別。
9.1.8 state 和disabledforeground
state是設置多選按鈕的狀態。一共有三種:NORMAL、ACTIVE和DISABLED。NORMAL和ACTIVE狀態下,多選按鈕可以正常使用。DISABLED狀態下,多選按鈕不能使用或者選擇。而disabledforeground是設置在DISABLED狀態下多選按鈕的提示文字顏色的,也就是說,在多選按鈕被禁止使用的情況下,可以通過這個屬性來提示用戶當前的狀態是DISABLED。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,
text='禁用背景色',
state='disabled',
disabledforeground='red')
b1.pack()
root.mainloop()

結果:

說明:在多選按鈕被禁用的情況下,提示文本的顏色是紅色的。
9.1.9 highlightcolor、highlightbackground和highlightthickness
這三個屬性是處理多選按鈕獲得或者失去輸入焦點時候的邊框的背景顏色、高亮顏色以及邊框的寬度。不過highlightcolor和highlightbackground在多選按鈕中不起作用。highlightthickness是有效果的,可以增加邊框的寬度。
9.1.10 selectcolor
多選按鈕的指示符背景色。默認是白色的。可以通過設置此選項設置指示符的顏色

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
color=tk.IntVar()
b1 = tk.Checkbutton(root,text='紅色',
bg='red',selectcolor='yellow')
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue')
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green')
b3.pack()
root.mainloop()

結果:

9.1.11 selectimage
設置多選按鈕被選中後,要顯示的圖片。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
aimage=tk.PhotoImage(file='a.gif')
bimage=tk.PhotoImage(file='b.gif')
b1 = tk.Checkbutton(root,bg='red',
image=aimage,selectimage=bimage)
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue')
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green')
b3.pack()
root.mainloop()

結果:


說明:一定要使用image來作為提示信息。如果是使用text屬性來顯示文本提示信息的,selectimage屬性沒有作用。
9.1.12 cursor
鼠標經過多選按鈕時的形狀。詳細的cursor信息參見3.3.6節

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,bg='red',text='紅色',cursor='spider')
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue')
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green')
b3.pack()
root.mainloop()

結果:

9.1.13 overrelief 和 relief
relief是設置邊框的顯示效果。overrelief是在鼠標經過時邊框的顯示效果。relief的有關說明見3.3.5節

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,bg='red',
text='紅色',relief='flat',bd=5)
b1.pack()
b2 = tk.Checkbutton(root,
text='藍色',bg='blue',relief='flat',
overrelief='groove',bd=5)
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green',
relief='flat',bd=5)
b3.pack()
root.mainloop()

結果:

說明:

  1. 正常的顯示是’flat’,由relief設定。
    2.當鼠標經過多選按鈕區域時,外觀會發生變化。比如示例中就顯示為GROOVE的效果。這個屬性由overrelief設置。
    9.1.14 indicatoron 和 offrelief
    正常的情況下,使用多選按鈕都是有指示符的,就是在提示文字前面的方形按鈕。不過也可以不用這個指示符,而使用按壓式按鈕的形式。就是按鈕被按下表示被選中,按鈕彈起表示沒有被選中。默認情況下,indicatoron是False,表示使用指示符。如果設為True,就不使用指示符。
    在不使用指示符的情況下,可以通過設定offrelief來設置按鈕沒有被選中時候的效果,此時上一節介紹的relief就沒有作用了。
    為了突出顯示效果,最好把邊框值設定的大一些。默認值是2,建議設置bd>5。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,text='紅色',
bg='red',bd=5,indicatoron=False,
offrelief='groove',relief='flat')
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue',
bd=5,indicatoron=False,
offrelief='groove',relief='flat')
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green',
bd=5,indicatoron=False,
offrelief='groove',relief='flat')
b3.pack()
root.mainloop()

結果:


說明:1. indicatoron=False時,多選按鈕沒有通常的指示符。
offrelief的設置起作用,而relief則沒有效果了。offrelief=’groove’而relief=’flat’,可以看到最終的效果是GROOVE。
9.1.15 padx和pady
padx和pady是分別定義留出多大的內邊距在水平和垂直方向上。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,text='紅色',
bg='red',bd=5,padx=10,pady=10)
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue',bd=5)
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green',bd=5)
b3.pack()
root.mainloop()

結果:

9.1.16 compound
compound設置如何在使用圖片作為提示信息的時候疊加文字的方式。有5個選項:
LEFT,RIGHT,TOP,BOTTOM,CENTER
如果沒有設置compound是無法同時顯示文字和圖片的。顯示的優先級是image > bitmap >text

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
aimage=tk.PhotoImage(file='a.gif')
b1 = tk.Checkbutton(root,image=aimage,
compound=tk.TOP,bg='red',text='紅色')
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue',bd=5)
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green',bd=5)
b3.pack()
root.mainloop()

結果:

9.1.17 height 和width
設置多選選按鈕的長度和寬度。width的單位是字符,height的單位是行。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,height=2,width=3,bg='red',text='紅色')
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue',bd=5,)
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green',bd=5)
b3.pack()
root.mainloop()

結果:

9.1.18 takefocus
takefocus的作用是定義多選按鈕是否可以使用Tab鍵獲得輸入焦點。默認情況下是可以。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,takefocus=0,bg='red',text='紅色',bd=5)
b1.pack()
b2 = tk.Checkbutton(root,takefocus=1,text='藍色',bg='blue',bd=5,)
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green',bd=5)
b3.pack()
root.mainloop()

‘紅色’的多選按鈕是無法用Tab獲得輸入焦點的
‘藍色’的多選按鈕可以獲得輸入焦點,因為takefocus=1
‘綠色’的多選按鈕也可以獲得輸入焦點,因為默認值是1。
9.1.19 text和textvariable
有兩種方法設置多選按鈕的提示文字。一種是使用text,另外一種是使用textvariable。這個屬性不是多選按鈕的取值,僅僅設置多選按鈕的提示文字。
text屬性是直接賦值就可以了。textvariable需要通過修改與textvariable關聯的StringVar對象達到賦值提示文字的作用。
如何動態修改提示文字?也是有兩種方法:
(1)checkbutton[‘text’]=’提示文字’
(2)strvar.set(‘提示文字’)。strvar是一個StringVar對象,與textvariable相關聯。

#代碼1:
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
strvar=tk.StringVar()
strvar.set('藍色')
b1 = tk.Checkbutton(root,bg='red',text='紅色',bd=5)
b1.pack()
b2 = tk.Checkbutton(root,textvariable=strvar,
bg='blue',bd=5,)
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green',bd=5)
b3.pack()
root.mainloop()
#代碼2:
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
strvar=tk.StringVar()
strvar.set('藍色')
b1 = tk.Checkbutton(root,takefocus=0,
bg='red',text='紅色',bd=5)
b1.pack()
b2 = tk.Checkbutton(root,textvariable=strvar,
bg='blue',bd=5,)
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green',bd=5)
b3.pack()
def change_text():
b1['text']='提示文字'
strvar.set('提示文字')
b4=tk.Button(root,text='修改提示文字',
command=change_text)
b4.pack()
root.mainloop()

結果:



9.1.20 underline
underline的作用是在第幾個提示文字下面標識下劃線。0表示第一個字符,1,表示第二個字符,以此類推。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,bg='red',
underline=3,text='紅色的字符',bd=5)
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue',bd=5,)
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green',bd=5)
b3.pack()
root.mainloop()

結果:

9.1.21 wraplength
當提示文字過長的時候,是否折行顯示。在沒有規定width和height的情況下,控件會自動計算提示文字的大小並顯示。但是在規定了width的情況下,如果提示文字過長,會有部分文字無法顯示。這個時候,可以通過設置wraplength來折行顯示。但是如果height的行數設置不夠,還是會發生字符不能顯示的情況。注意wraplength的單位是像素,而不是字符。

#代碼1:
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,bg='red',height=5,width=3,
text='紅色的文字很長的文字',bd=5)
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue',bd=5,)
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green',bd=5)
b3.pack()
root.mainloop()
#代碼2:
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,bg='red',height=5,width=3,
wraplength=90,
text='紅色的文字很長的文字',bd=5)
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue',bd=5,)
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green',bd=5)
b3.pack()
root.mainloop()
#代碼3:
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Checkbutton(root,bg='red',height=5,width=3,
wraplength=40,
text='紅色的文字很長的文字',bd=5)
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue',bd=5,)
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green',bd=5)
b3.pack()
root.mainloop()

結果:



說明:
代碼1的情況就是多選按鈕的width不夠寬,因而無法顯示全部的提示文字。
代碼2的情況是設置了wraplength後,顯示折行。但是由於width不夠寬,還是不能顯示全部的內容。
代碼3的情況是顯示了全部的文字。
9.1.22 justify
justify是在折行的情況下定義如何對齊,有三種方式:CENTER,LEFT和RIGHT。詳細的說明見第四章
9.1.23 variable,onvalue和offvalue
多選按鈕可以設置on和off的數值,也就是多選按鈕是否被選中可以有不同的值。比如,選中為1,沒有選中為0等等。由於是多選按鈕,所以每一個多選按鈕都有一個變量,該變量與多選按鈕的variable相關聯。可以通過關聯的變量獲取多選按鈕當前的值,on或者off的值。比如下面代碼中的check_red等。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
entry=tk.StringVar()
check_red=tk.StringVar()
check_red.set('紅色On')
check_blue=tk.StringVar()
check_blue.set('藍色Off')
check_green=tk.StringVar()
check_green.set('綠色Off')
b1 = tk.Checkbutton(root,bg='red',text='紅色',bd=5,
onvalue='紅色On',offvalue='紅色Off',
variable=check_red)
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue',bd=5,
onvalue='藍色On',offvalue='藍色Off',
variable=check_blue)
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green',bd=5,
onvalue='綠色On',offvalue='綠色Off',
variable=check_green)
b3.pack()
b5=tk.Entry(root,textvariable=entry)
b5.pack()
def check_value():
entry.set(check_red.get()+' '+check_blue.get()
+" "+check_green.get())
b4=tk.Button(root,text='Check',command=check_value)
b4.pack()
root.mainloop()

結果:

說明:
variable與變量相關聯,可以直接使用get()方法獲取多選按鈕的取值,on或者off的值。
onvalue:當多選按鈕被選中時的取值
offvalue:當多選按鈕沒有被選中時的取值。
9.1.24 command
定義多選按鈕的回調函數,當多選按鈕的狀態發生變化時,就會調用這個回調函數。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
entry=tk.StringVar()
check_red=tk.StringVar()
check_red.set('紅色On')
check_blue=tk.StringVar()
check_blue.set('藍色Off')
check_green=tk.StringVar()
check_green.set('綠色Off')
b5=tk.Entry(root,textvariable=entry)
def red():
entry.set('紅色: '+check_red.get())
def blue():
entry.set('藍色: '+check_blue.get())
def green():
entry.set('綠色: '+check_green.get())
b1 = tk.Checkbutton(root,bg='red',text='紅色',bd=5,
onvalue='紅色On',offvalue='紅色Off',
variable=check_red,command=red)
b1.pack()
b2 = tk.Checkbutton(root,text='藍色',bg='blue',bd=5,
onvalue='藍色On',offvalue='藍色Off',
variable=check_blue,command=blue)
b2.pack()
b3 = tk.Checkbutton(root,text='綠色',bg='green',bd=5,
onvalue='綠色On',offvalue='綠色Off',
variable=check_green,command=green)
b3.pack()
b5.pack()
root.mainloop()

結果:


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