1. 程式人生 > >GUI的最終選擇 Tkinter(三):Checkbutton元件和Radiobutton元件、LabelFrame元件

GUI的最終選擇 Tkinter(三):Checkbutton元件和Radiobutton元件、LabelFrame元件

Checkbutton元件

Checkbutton元件就是常見的多選按鈕,而Radiobutton則是單選按鈕

 1 from tkinter import *
 2 
 3 root = Tk()
 4 v = IntVar() #設定一個Tkinter變數,用於表示該按鈕是否被選中
 5 c = Checkbutton(root,text="測試一下",variable=v)
 6 c.pack()
 7 
 8 #如果選項被選中,那麼變數v被賦值為1,否則為0
 9 l = Label(root,textvariable=v)  #用Label標籤動態展示狀態
10
l.pack() 11 mainloop()

執行結果:

當單擊選項時,Label顯示的變數相應地發生了改變。

根據上面的基礎,但是如果是多個選項時,我們就可以用for迴圈來顯示資料,例

from tkinter import *

root = Tk()
gilrs = ["楊冪","唐嫣","小龍女","孫儷"]
v = []
for g in gilrs:
    v.append(IntVar())
    b = Checkbutton(root,text=g,variable=v[-1])
    b.pack(anchor=W)
mainloop()

執行結果:

注意哦,我這裡對pack()方法的anchor選項實現了定位顯示位置,讓其左對齊pack(anchor=W),其可設定為N,NE,E,SE,S,SW,W,NW和CENTER九個不同的值。這就是指南針的九個不同方位,按照“上北下南左西右東”的原則,如下圖

 

 

 Radiobutton元件

Radiobutton元件跟Checkbutton元件的用法基本一致,唯一不同的是Radiobuttonbutton實現的是單選效果,要實現這種互斥的效果,同一組內的所有Radiobutton只能共享一個variable選項,並且需要設定不同的value選項值。

1 from tkinter import *
2 
3 root = Tk()
4 v = IntVar()
5 Radiobutton(root,text="one",variable=v,value=1).pack(anchor=W)
6 Radiobutton(root,text="two",variable=v,value=2).pack(anchor=W)
7 Radiobutton(root,text="three",variable=v,value=3).pack(anchor=W)
8 Radiobutton(root,text="four",variable=v,value=4).pack(anchor=W)
9 mainloop()

執行效果:

程式中如果有多個選項,可以用迴圈來處理,這樣程式碼會簡潔,例如:

 1 from tkinter import *
 2 
 3 root = Tk()
 4 langs = [("python",1),("perl",2),("ruby",3)]
 5 v = IntVar()
 6 v.set(1)
 7 for lang,num in langs:
 8     b = Radiobutton(root,text=lang,variable=v,value=num)
 9     b.pack(anchor=W)
10 mainloop()

執行結果:

如果你不喜歡按鈕前面的小圓圈,可以替換成按鈕的形式

b = Radiobutton(root,text=lang,variable=v,value=num,indicatoron=False)
b.pack(fill=X)

修改後程式如圖:

LabelFrame元件

 LabelFrame元件是Frame框架的進化版,從形態上來說,也就是添加了Label和Frame,但有了它,Checkbutton和Radiobutton的元件分組就簡單了。

from tkinter import *

root = Tk()
group = LabelFrame(root,text="最好的指令碼語言是:",padx=5,pady=5)
group.pack(padx=10,pady=10)

langs = [("python",1),("perl",2),("ruby",3)]
v = IntVar()
v.set(1)
for lang,num in langs:
    b = Radiobutton(group,text=lang,variable=v,value=num)
    b.pack(anchor=W)
mainloop()

執行結果: