天天看點

魚c筆記——Python 的 GUI 程式設計(三):Tkinter 的三個元件 Checkbutton、Radiobutton 和 Labelframe

目錄

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()
           
魚c筆記——Python 的 GUI 程式設計(三):Tkinter 的三個元件 Checkbutton、Radiobutton 和 Labelframe

下面是一個翻牌子的程式:

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()
           
魚c筆記——Python 的 GUI 程式設計(三):Tkinter 的三個元件 Checkbutton、Radiobutton 和 Labelframe

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()
           
魚c筆記——Python 的 GUI 程式設計(三):Tkinter 的三個元件 Checkbutton、Radiobutton 和 Labelframe

當存在多個選項的時候,使用循環會更加簡潔。

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()
           
魚c筆記——Python 的 GUI 程式設計(三):Tkinter 的三個元件 Checkbutton、Radiobutton 和 Labelframe

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 的三個元件 Checkbutton、Radiobutton 和 Labelframe

下一篇:魚c筆記——Python 的 GUI 程式設計(四):Tkinter 元件 Entry

繼續閱讀