《零基础入门学习Python》第066讲:GUI的终极选择:Tkinter3

版权声明:转载请标明出处 https://blog.csdn.net/qq_41556318/article/details/85088155

今天我们一起来学习三个组件:CheckbuttonRadiobuttonLabelFrame

同样,我们还是通过案例来讲解。

一、Checkbutton

Checkbutton(多选框)。大家都知道什么叫做“翻牌子”,今天的第一个例子就是来写一个翻牌子的程序。

Checkbutton 就是我们常见的多选框按钮,而 下面要讲的 Radiobutton 就是单选框按钮。那大家觉得 翻牌子 程序应该是使用  Checkbutton  还是  Radiobutton 来实现呢?我个人认为哈,应该是 Checkbutton 。

我们首先来测试一下  Checkbutton ,来感受一下 它的用法:

import tkinter as tk

root = tk.Tk()

v = tk.IntVar() #设置一个tk 变量用于表示按钮是否被选中,这里用整型变量 IntVar

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

root.mainloop

运行结果如下:

没有按按钮时: ->         点下按钮的时候:->  

当我们点下按钮的时候,这个框框里会出现一个小勾,为了更直观的让大家知道选中和未选中时 v 的表现状态,我们可以把它显示出来,显示在 Label 标签里面。

import tkinter as tk

root = tk.Tk()

v = tk.IntVar() #设置一个tk 变量用于表示按钮是否被选中,这里用整型变量 IntVar

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

l = tk.Label(root, textvariable = v)
l.pack()

root.mainloop

运行结果如下:

没有选中时: ->         选中的时候:->  

有了这样的基础,我们就可以来写我们的翻牌子程序了。

import tkinter as tk

root = tk.Tk()

GIRLS = ["西施", "貂蝉", "王昭君", "杨玉环"]

v = []

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

运行结果如下:

我们希望把所有的 Checkbotton 左对齐:

通过设置 pack 的 anchor 选项,就可以实现了。 anchor 选项 是用于制定显示位置的。

anchor 用法:

1. 控制文本(或图像)在 Button 中显示的位置

2. "n", "ne", "e", "se", "s", "sw", "w", "nw", 或者 "center" 来定位(ewsn 代表东西南北,上北下南左西右东)

3. 默认值是 "center"

b.pack(anchor = "w")

二、Radiobutton

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

我们通过代码来讲解:

import tkinter as tk

root = tk.Tk()

v = tk.IntVar()

tk.Radiobutton(root, text = "One", variable = v, value = 1).pack(anchor = "w")
tk.Radiobutton(root, text = "Two", variable = v, value = 2).pack(anchor = "w")
tk.Radiobutton(root, text = "Three", variable = v, value = 3).pack(anchor = "w")

root.mainloop()

运行结果如下:

这里有两点需要注意的:

1、variable 选项只能设置为同一个变量,这里都是 v;

2、value 选项的值 一定要不同,才能实现互测。

Radiobutton 的原理就是:你每一次点中一个按钮,它就会把这个按钮的 value 给 v,然后根据 v 的值来选中对应的框。

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

import tkinter as tk

root = tk.Tk()
LANGS = [
        ("Python", 1),
        ("Perl", 2),
        ("Ruby", 3),
        ("Lua", 4),
        ("C++", 5)]

v = tk.IntVar()
v.set(1)

for lang, num in LANGS:
        b = tk.Radiobutton(root, text = lang, variable = v, value = num)
        b.pack(anchor = "w")
        
root.mainloop()

运行结果如下:

有人要提意见了:“我不喜欢前面的小圆圈,我有圆形恐惧症!”

没问题,我们只需要加一个选项 indicatoron = False。(indicatoron 就是指示器,就是前面的小圆圈,把它设置为 False,就不会显示了。

b = tk.Radiobutton(root, text = lang, variable = v, value = num, indicatoron = False)
b.pack(anchor = "w")

如下:

这样不美观,我们可以横向填充按钮。

b = tk.Radiobutton(root, text = lang, variable = v, value = num, indicatoron = False)
b.pack(fill = "x")

三、LabelFrame

LabelFrame(标签框架),这实际上是 Frame 框架的进化版,从形态上来说,也就是添加了 Label 的 Frame,但是有了它,Checkbutton 和 Radiobutton 的分组就变得简单了。

import tkinter as tk

root = tk.Tk()

group = tk.LabelFrame(root, text = "最好的脚本语言是:", padx = 5, pady =5)
group.pack(padx = 10, pady = 10)

LANGS = [
        ("Python", 1),
        ("Perl", 2),
        ("Ruby", 3),
        ("Lua", 4),
        ("C++", 5)]

v = tk.IntVar()

for lang, num in LANGS:
        b = tk.Radiobutton(group, text = lang, variable = v, value = num)
        b.pack(anchor = "w")
        
root.mainloop()

运行结果如下:

猜你喜欢

转载自blog.csdn.net/qq_41556318/article/details/85088155