目錄
Checkbutton
Radiobutton
Labelframe
Checkbutton
先感受一下 Checkbutton 的用法:
from tkinter import *
root = Tk()
v = IntVar() #需要一個tk變量,用于表示按鈕是否被選中。預設情況下,未選中是0,選中是1
c = Checkbutton(root, text='測試一下', variable=v) #variable用來表示按鈕的狀态(是否被按下)
c.pack()
l = Label(root, textvariable=v) #為了更直覺的看出選中和未選中v的表現狀态,可以将其顯示在Label标簽裡
l.pack()
mainloop()
下面是一個翻牌子的程式:
from tkinter import *
root = Tk()
GIRLS = ['西施', '貂蟬', '王昭君', '楊玉環']
v = [] #每一個按鈕都需要一個存放變量的,是以這裡用清單。後面用循環來添加
for girl in GIRLS:
v.append(IntVar())#每一次都需要一個整形的tk變量用于每個存放按鈕的狀态,再追加到清單裡去
b = Checkbutton(root, text=girl, variable=v[-1]) #依次顯示每個girl的名字。每一次都要拿到最後一個元素,是以是-1
b.pack(anchor=W) #所有的Checkbutton左對齊。anchor用于指定顯示位置,可以設定為N W S E NW WS SE EN(東南西北英文縮寫) CENTER九個不同的值
mainloop()
Radiobutton
Radiobutton 的用法和 Checkbutton 的用法基本一緻,唯一的不同是 Radiobutton 要實作單選的效果,即互斥的效果。同一組内,所有的 Radiobutton 隻能共享一個 variable 這個選項,并且要設定不同的 value 的值。
from tkinter import *
root = Tk()
v = IntVar() #多個按鈕隻需要一個變量
#variable隻能是同一個變量。value的值必須不同才能互斥
Radiobutton(root, text='one', variable=v, value=1).pack(anchor=W)
Radiobutton(root, text='two', variable=v, value=2).pack(anchor=W)
Radiobutton(root, text='three', variable=v, value=3).pack(anchor=W)
#原理是每一次點中一個按鈕,會把value的值給v,給這個v說明點中了。再和其他的value值對比,都不是2,是以不顯示
mainloop()
當存在多個選項的時候,使用循環會更加簡潔。
from tkinter import *
root = Tk()
v = IntVar() #多個按鈕隻需要一個變量
LANGS = [
('Pyhton', 1),
('Perl', 2),
('Ruby', 3),
('Lua', 4)]
v = IntVar()
v.set(1)
for lang, num in LANGS:
b = Radiobutton(root, text=lang, variable=v, value=num, indicatoron=False) #改變前面的小圓點為按鈕形式
b.pack(fill=X) #X是橫向填充,Y是縱向填充
mainloop()
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 = [
('Pyhton', 1),
('Perl', 2),
('Ruby', 3),
('Lua', 4)]
v = IntVar()
for lang, num in LANGS:
b = Radiobutton(group, text=lang, variable=v, value=num)
b.pack(anchor=W)
mainloop()
下一篇:魚c筆記——Python 的 GUI 程式設計(四):Tkinter 元件 Entry