鱼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()

下面是一个翻牌子的程序:

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_第1张图片

 

 

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_第2张图片

当存在多个选项的时候,使用循环会更加简洁。

 

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_第3张图片

 

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_第4张图片

下一篇:鱼c笔记——Python 的 GUI 编程(四):Tkinter 组件 Entry

你可能感兴趣的:(#,Python学习笔记)