当前位置:首页>python>Python 第30 课 Tkinter——单选与多选按钮 GUI编程

Python 第30 课 Tkinter——单选与多选按钮 GUI编程

  • 2026-09-02 19:47:19
Python 第30 课 Tkinter——单选与多选按钮 GUI编程
上节课咱们刚搞定Text文本框和Scrollbar滚动条,能轻松处理大段文字了,今天咱们玩点更有意思的——解锁Tkinter里的“选择神器”:Radiobutton(单选按钮)和Checkbutton(多选按钮)!
单选按钮就是“只能选一个”,比如选性别、选最喜欢的水果;
多选按钮是“想选几个选几个”,比如选兴趣爱好、选想吃的菜~这俩可是做问卷、做选择题、做小调查的核心,今天全程敲代码,跟着大麒老师做,保证新手也能会!

📌 温故知新:上节课重点快速过

先花30秒回顾,别学新的忘旧的~
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程序!
今天的单选/多选按钮学会了吗?关注大麒老师,咱们下次见!

最新文章

随机文章