上节课咱们刚搞定Text文本框和Scrollbar滚动条,能轻松处理大段文字了,今天咱们玩点更有意思的——解锁Tkinter里的“选择神器”:Radiobutton(单选按钮)和Checkbutton(多选按钮)!单选按钮就是“只能选一个”,比如选性别、选最喜欢的水果;多选按钮是“想选几个选几个”,比如选兴趣爱好、选想吃的菜~这俩可是做问卷、做选择题、做小调查的核心,今天全程敲代码,跟着大麒老师做,保证新手也能会!📌 温故知新:上节课重点快速过
Text组件:能写多行文字,插、删、取都能用,记得用“1.0”“end”这些索引定位;Scrollbar滚动条:和Text绑一起才管用,垂直的最常用,水平的要设wrap=tk.NONE;布局坑:同一窗口里pack和grid不能混着用,一混就报错,用Frame分组就不乱啦。🔍 一、Radiobutton:单选按钮(多选一,选了这个就不能选那个)
单选按钮就像做单项选择题,ABCD里只能选一个,同一组里的按钮是“互斥”的,超适合选性别、选年级、选最爱吃的食物这种场景。1. 单选按钮基本写法
Radiobutton(父容器, text="显示的文字", variable=共享变量, value=唯一值)
大麒老师划重点:同一组单选按钮必须绑同一个变量,不然就没法“互斥”啦!2. 核心属性(记3个最关键的)
属性 | 作用(大白话) | 例子 |
|---|
text | 按钮上显示的字 | text="甜食" |
variable | 同一组共享的变量(比如tk.IntVar()) | variable=v(v=tk.IntVar()) |
value | 每个按钮的“身份证”(同一组里不能一样) | value=1 |
3. 核心逻辑(一句话记住)
同一组单选按钮绑同一个variable,选哪个按钮,variable的值就变成这个按钮的value,用variable.get()就能知道选了啥~4. 实战1:基础版(选最爱吃的食物,给饮食建议)
咱们做个小调查,选完食物点“确定”,就给小朋友提建议:import tkinter as tk# 选完触发的函数:根据选的食物给建议def suggest(): choice = v.get() # 拿到选中按钮的value值 if choice == 1: result_var.set("建议少吃,容易蛀牙~") elif choice == 2: result_var.set("建议少吃,容易肥胖~") elif choice == 3: result_var.set("营养健康,身体棒!") elif choice == 4: result_var.set("合理搭配,营养均衡~") elif choice == 5: result_var.set("建议少喝,容易肥胖~")root = tk.Tk()root.title("大麒老师的饮食调查")root.geometry("250x220")# 标题tk.Label(root, text="请选择你最爱吃的食物:", font=("宋体", 12)).pack(pady=5)# 同一组单选按钮共享的变量(存整数)v = tk.IntVar()v.set(1) # 默认选中第一个(甜食)# 做5个单选按钮,左对齐更整齐tk.Radiobutton(root, text="甜食", variable=v, value=1, font=("宋体", 11), anchor="w").pack(fill=tk.X, padx=20)tk.Radiobutton(root, text="油炸食品", variable=v, value=2, font=("宋体", 11), anchor="w").pack(fill=tk.X, padx=20)tk.Radiobutton(root, text="水果和蔬菜", variable=v, value=3, font=("宋体", 11), anchor="w").pack(fill=tk.X, padx=20)tk.Radiobutton(root, text="五谷杂粮", variable=v, value=4, font=("宋体", 11), anchor="w").pack(fill=tk.X, padx=20)tk.Radiobutton(root, text="可乐饮料", variable=v, value=5, font=("宋体", 11), anchor="w").pack(fill=tk.X, padx=20)# 显示建议的标签result_var = tk.StringVar()tk.Label(root, textvariable=result_var, font=("宋体", 11), fg="red").pack(pady=10)# 确定按钮tk.Button(root, text="确定", command=suggest, font=("宋体", 12), bg="lightblue").pack()root.mainloop()
5. 实战2:优化版(用列表+循环,少写重复代码)
如果选项多,一个个写按钮太麻烦,大麒老师教你们用列表存选项,循环创建,省事儿!import tkinter as tk# 选项列表:(显示文字, value值, 建议)food_list = [ ("甜食", 0, "建议少吃,容易蛀牙~"), ("油炸食品", 1, "建议少吃,容易肥胖~"), ("水果和蔬菜", 2, "营养健康,身体棒!"), ("五谷杂粮", 3, "合理搭配,营养均衡~"), ("可乐饮料", 4, "建议少喝,容易肥胖~")]# 回调函数def suggest(): choice = v.get() # 直接从列表里拿建议,不用写一堆if result_var.set(food_list[choice][2])root = tk.Tk()root.title("饮食调查(优化版)| 大麒老师课堂")root.geometry("250x220")tk.Label(root, text="请选择你最爱吃的食物:", font=("宋体", 12)).pack(pady=5)v = tk.IntVar()v.set(0) # 默认选第一个# 循环创建按钮,一行代码搞定5个!for text, val, tip in food_list: tk.Radiobutton( root, text=text, variable=v, value=val, font=("宋体", 11), anchor="w" ).pack(fill=tk.X, padx=20)result_var = tk.StringVar()tk.Label(root, textvariable=result_var, font=("宋体", 11), fg="red").pack(pady=10)tk.Button(root, text="确定", command=suggest, font=("宋体", 12), bg="lightblue").pack()root.mainloop()
🔍 二、Checkbutton:多选按钮(多选多,想选几个选几个)
多选按钮就像做多选题,ABCDE能随便选,每个按钮都是独立的,适合选兴趣爱好、选周末想做的事这种场景。1. 核心区别(和单选按钮比)
特点 | 单选按钮(Radiobutton) | 多选按钮(Checkbutton) |
|---|
选择逻辑 | 同一组只能选一个 | 每个按钮独立,可多选 |
变量绑定 | 同一组共享1个变量 | 每个按钮绑1个独立变量 |
选中状态 | 选中时变量=按钮的value | 选中=1,没选中=0 |
2. 实战:捡钱小调查(超有趣)
做个小游戏:地上有50和100块,选捡哪张,点确定给反馈~import tkinter as tk# 选完给反馈的函数def choose(): # 拿两个按钮的选中状态(1=选了,0=没选) pick_50 = var1.get() pick_100 = var2.get() if pick_50 == 1 and pick_100 == 1: result_var.set("真聪明!两张都要~") elif pick_50 == 1 or pick_100 == 1: result_var.set("太傻啦!应该都捡呀~") else: result_var.set("怎么不捡钱呀?")root = tk.Tk()root.title("捡钱选择 | 大麒老师课堂")root.geometry("250x180")# 标题(换行用\n)tk.Label(root, text="地上有两张钱,一张50,一张100,\n你捡哪张?", font=("宋体", 12)).pack(pady=10)# 每个多选按钮绑独立变量var1 = tk.IntVar() # 50元var2 = tk.IntVar() # 100元# 创建多选按钮tk.Checkbutton(root, text="50元", variable=var1, font=("宋体", 11), anchor="w").pack(fill=tk.X, padx=40)tk.Checkbutton(root, text="100元", variable=var2, font=("宋体", 11), anchor="w").pack(fill=tk.X, padx=40)# 结果显示result_var = tk.StringVar()result_var.set("请选择~")tk.Label(root, textvariable=result_var, font=("宋体", 11), fg="red").pack(pady=10)# 确定按钮tk.Button(root, text="确定", command=choose, font=("宋体", 12), bg="lightgreen").pack()root.mainloop()
📌 大麒老师课堂小结(记4个关键点)
单选按钮:同一组共享1个变量,value唯一,用variable.get()拿选中值;多选按钮:每个按钮绑1个变量,选中=1、未选=0,挨个get()就能知道选了啥;小技巧:选项多就用“列表+循环”,少写重复代码,用anchor="w"让按钮左对齐,界面更整齐;实战用:这俩组件能做问卷、考试、小调查,和之前学的Text、Button结合,能做超好玩的GUI程序!今天的单选/多选按钮学会了吗?关注大麒老师,咱们下次见!