鱼c笔记——Python的GUI编程(三):Tkinter的三个组件Checkbutton、Radiobutton和Labelframe

内容摘要:

Checkbutton、Radiobutton和Labelframe的基本用法

pack的anchor属性、fill属性

通过修改Radiobutton的indicatoror属性改变默认的圆形勾选框

Checkbutton多选框。

Radiobutton单选框

先感受一下Checkbutton的用法:

 
  1. from tkinter import *

  2.  
  3. root = Tk()

  4.  
  5. v = IntVar() #需要一个tk变量,用于表示按钮是否被选中。默认情况下,未选中是0,选中是1

  6.  
  7. c = Checkbutton(root, text='测试一下', variable=v) #variable用来表示按钮的状态(是否被按下)

  8. c.pack()

  9.  
  10. l = Label(root, textvariable=v) #为了更直观的看出选中和未选中v的表现状态,可以将其显示在Label标签里

  11. l.pack()

  12.  
  13. mainloop()

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

 
  1. from tkinter import *

  2.  
  3. root = Tk()

  4.  
  5. GIRLS = ['西施', '貂蝉', '王昭君', '杨玉环']

  6.  
  7. v = [] #每一个按钮都需要一个存放变量的,所以这里用列表。后面用循环来添加

  8.  
  9. for girl in GIRLS:

  10. v.append(IntVar())#每一次都需要一个整形的tk变量用于每个存放按钮的状态,再追加到列表里去

  11. b = Checkbutton(root, text=girl, variable=v[-1]) #依次显示每个girl的名字。每一次都要拿到最后一个元素,因此是-1

  12. b.pack(anchor=W) #所有的Checkbutton左对齐。anchor用于指定显示位置,可以设置为N W S E NW WS SE EN(东南西北英文缩写) CENTER九个不同的值

  13.  
  14. mainloop()

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

 
  1. from tkinter import *

  2.  
  3. root = Tk()

  4.  
  5. v = IntVar() #多个按钮只需要一个变量

  6.  
  7. #variable只能是同一个变量。value的值必须不同才能互斥

  8. Radiobutton(root, text='one', variable=v, value=1).pack(anchor=W)

  9. Radiobutton(root, text='two', variable=v, value=2).pack(anchor=W)

  10. Radiobutton(root, text='three', variable=v, value=3).pack(anchor=W)

  11. #原理是每一次点中一个按钮,会把value的值给v,给这个v说明点中了。再和其他的value值对比,都不是2,因此不显示

  12.  
  13. mainloop()

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

 
  1. from tkinter import *

  2.  
  3. root = Tk()

  4.  
  5. v = IntVar() #多个按钮只需要一个变量

  6.  
  7. LANGS = [

  8. ('Pyhton', 1),

  9. ('Perl', 2),

  10. ('Ruby', 3),

  11. ('Lua', 4)]

  12.  
  13. v = IntVar()

  14. v.set(1)

  15.  
  16. for lang, num in LANGS:

  17. b = Radiobutton(root, text=lang, variable=v, value=num, indicatoron=False) #改变前面的小圆点为按钮形式

  18. b.pack(fill=X) #X是横向填充,Y是纵向填充

  19.  
  20. mainloop()

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

 
  1. from tkinter import *

  2.  
  3. root = Tk()

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

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

  7.  
  8. LANGS = [

  9. ('Pyhton', 1),

  10. ('Perl', 2),

  11. ('Ruby', 3),

  12. ('Lua', 4)]

  13.  
  14. v = IntVar()

  15.  
  16. for lang, num in LANGS:

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

  18. b.pack(anchor=W)

  19.  
  20. mainloop()

猜你喜欢

转载自blog.csdn.net/weixin_41738417/article/details/81605598