GUI的终极选择:Tkinter3:Checkbutton、Radiobutton 和 LabelFrame。

##Checkbutton
   Checkbutton:Checkbutton 就是我们常见的多选框按钮
       (下面写一个"翻牌子"的程序来举例)
   先来测试一下 Checkbutton ,来感受一下 它的用法

from tkinter import *

root = Tk()

v = IntVar()

c = Checkbutton(root,text="测试一下",variable = v)
c.pack()


mainloop()

在这里插入图片描述                 在这里插入图片描述
       (解析:首先还是先实例化一个root顶层窗口,然后v = IntVar()这里需要用到一个Tkinter变量,用于表示这个按钮是否被选中,作为一个反馈,接着实例化Checkbutton,第一个参数即把这个按钮放到root窗口中,第二个参数为按钮的内容,第三个参数就是设置variable参数等于v那个变量,等等后边用来反馈按钮是否被选中)

   为了更直观地看到选中和未选中时 v 的表现状态,我们可以把它显示出来,显示在 Label 标签里边。
在这里插入图片描述
在这里插入图片描述                 在这里插入图片描述

   开始写翻牌程序

from tkinter import *

root = Tk()

GIRLS = ["戴安娜","九尾狐妖","卡特","辛德拉"]

v = []

for girl in GIRLS:
    v.append(IntVar())
    b = Checkbutton(root,text = girl,variable = v[-1])
    b.pack()

mainloop()

在这里插入图片描述在这里插入图片描述在这里插入图片描述

       (解析:同样的先初始化了一个root窗口,然后这里使用循环的话会让我们的代码显得更加简洁,所以先来个GIRLS列表,接着再来一个变量v,我们每个按钮就需要一个存放变量的,所以还是给个列表,等等可以用循环来添加,然后在循环里边,每次都要一个Tkinter的变量用于存放每个按钮的状态,就可以把它追加到列表中去,接着实例化Checkbutton按钮,第三个参数因为每次都要拿到他最后的一个元素,所以是-1)

   可以看到按钮的选项不太整齐,我们通过设置 pack 的 anchor 选项来制定显示位置的。
       (anchor就是可以控制文本(或图像)在 Button 中显示的位置,他的参数值有9中设置方法:“n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”,“center” ,他们都是东南西北的缩写ewsn 分别代表东西南北,然后这里弄个左对齐就可以了,注意写的时候要大写)
在这里插入图片描述
在这里插入图片描述

##Radiobutton
   Radiobutton: Radiobutton 就是单选框按钮
       (Radiobutton 的用法和 Checkbutton 的用法基本一致,唯一不同的就是 Radiobutton 要实现单选的效果,那么要实现这种互斥的效果,就是需要同一组内所有的 Radiobutton 只能共享一个 variable 选项,并且需要设置不同的 value 选项的值。)

from tkinter import *

root = Tk()

v = IntVar()

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)

mainloop()

在这里插入图片描述
       (解析:一样的,先来个root窗口,然后上面说了多个按钮只需要一个变量,所以v = IntVar()就不用列表了,然后实例化出三个Radiobutt,然后第三个参数他们的variable的值都等于v,共享一个,接着后面要有value,而且他们的值不可以相同,在pick里面在设置一下左对齐。
       然后上面有两次需要注意的,variable只能设置为同样一个变量,设置为v,然后value的值一定要不同才能实现互斥,
       这个原理其实就是,每一次点中一个,比如点中了Two,那么他会把按钮的值即value =2赋给了v,给了这个v就说明他点中了,和其他两个一对比,上面的variable的值不少,下面的variable的值不是3,所以呢他们两个就不显示,v是等于2,和value=2是匹配的,这样就实现了互斥,单点了
       如果上面那个value也是2的话,那么问题就来了,只要点One和Two其中一个,两个就会同时显示)

       如果有多个选项的话,我们仍然可以使用循环,使得代码更加简洁:

from tkinter import *

root = Tk()

LANGS = [
    ("Python",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)
    b.pack(anchor = W)


mainloop()

在这里插入图片描述

   ※ 我们可以通过在Radiobutton的参数里设置:indicatoron = False,indicatoron 就是指示器,就是前面的小圆圈,设置为False就可以去掉小圈圈,变成按钮的形式
在这里插入图片描述
在这里插入图片描述

       但是这样不太美观,我们可以在pack里设置fill=X就是横向填充按钮,如果设置fill=Y就是纵向填充。
在这里插入图片描述
在这里插入图片描述
##LabelFrame
   LavelFrame:标签框架,这实际上是 Frame 框架的进化版,从形态上来说,也就是添加了 Label 的 Frame,但是有了它,Checkbutton 和 Radiobutton 的分组就变得简单了。

       比如现在想把刚才代码的四个组件给放到一个Frame里边去:

在这里插入图片描述

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),
    ("Lua",4)]


v = IntVar()

for lang, num in LANGS:
    b = Radiobutton(group,text=lang,variable=v,value=num)
    b.pack(anchor =W)


mainloop()

在这里插入图片描述

发布了247 篇原创文章 · 获赞 116 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/w15977858408/article/details/104148732