GUI的最終選擇 Tkinter(三):Checkbutton元件和Radiobutton元件、LabelFrame元件
阿新 • • 發佈:2018-11-12
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標籤動態展示狀態 10l.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()
執行結果: