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

今天我们一起来学习三个组件:Checkbutton、Radiobutton 和 LabelFrame。

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

一、Checkbutton

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

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

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

 
  
  1. import tkinter as tk

  2. root = tk.Tk()

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

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

  5. c.pack()

  6. root.mainloop

运行结果如下:

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

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

 
  
  1. import tkinter as tk

  2. root = tk.Tk()

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

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

  5. c.pack()

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

  7. l.pack()

  8. root.mainloop

运行结果如下:

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

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

 
  
  1. import tkinter as tk

  2. root = tk.Tk()

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

  4. v = []

  5. for girl in GIRLS:

  6. v.append(tk.IntVar())

  7. b = tk.Checkbutton(root, text = girl, variable = v[-1])

  8. b.pack()

  9. root.mainloop

运行结果如下:

《零基础入门学习Python》第066讲:GUI的终极选择:Tkinter3_第1张图片

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

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

anchor 用法:

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

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

3. 默认值是 "center"

b.pack(anchor = "w")

《零基础入门学习Python》第066讲:GUI的终极选择:Tkinter3_第2张图片

二、Radiobutton

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

我们通过代码来讲解:

 
  
  1. import tkinter as tk

  2. root = tk.Tk()

  3. v = tk.IntVar()

  4. tk.Radiobutton(root, text = "One", variable = v, value = 1).pack(anchor = "w")

  5. tk.Radiobutton(root, text = "Two", variable = v, value = 2).pack(anchor = "w")

  6. tk.Radiobutton(root, text = "Three", variable = v, value = 3).pack(anchor = "w")

  7. root.mainloop()

运行结果如下:

《零基础入门学习Python》第066讲:GUI的终极选择:Tkinter3_第3张图片

这里有两点需要注意的:

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

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

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

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

 
  
  1. import tkinter as tk

  2. root = tk.Tk()

  3. LANGS = [

  4. ("Python", 1),

  5. ("Perl", 2),

  6. ("Ruby", 3),

  7. ("Lua", 4),

  8. ("C++", 5)]

  9. v = tk.IntVar()

  10. v.set(1)

  11. for lang, num in LANGS:

  12. b = tk.Radiobutton(root, text = lang, variable = v, value = num)

  13. b.pack(anchor = "w")

  14. root.mainloop()

运行结果如下:

《零基础入门学习Python》第066讲:GUI的终极选择:Tkinter3_第4张图片

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

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

 
  
  1. b = tk.Radiobutton(root, text = lang, variable = v, value = num, indicatoron = False)

  2. b.pack(anchor = "w")

如下:

《零基础入门学习Python》第066讲:GUI的终极选择:Tkinter3_第5张图片

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

 
  
  1. b = tk.Radiobutton(root, text = lang, variable = v, value = num, indicatoron = False)

  2. b.pack(fill = "x")

《零基础入门学习Python》第066讲:GUI的终极选择:Tkinter3_第6张图片

三、LabelFrame

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

 
  
  1. import tkinter as tk

  2. root = tk.Tk()

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

  4. group.pack(padx = 10, pady = 10)

  5. LANGS = [

  6. ("Python", 1),

  7. ("Perl", 2),

  8. ("Ruby", 3),

  9. ("Lua", 4),

  10. ("C++", 5)]

  11. v = tk.IntVar()

  12. for lang, num in LANGS:

  13. b = tk.Radiobutton(group, text = lang, variable = v, value = num)

  14. b.pack(anchor = "w")

  15. root.mainloop()

运行结果如下:

《零基础入门学习Python》第066讲:GUI的终极选择:Tkinter3_第7张图片

你可能感兴趣的:(python,学习,java)