You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter中如何将列表项按7行2列生成带对应名称的Radiobutton网格

问题原因

你的代码存在两个核心错误:

  • 嵌套了多余的第三层循环for body in range(len(bs)),会导致每个网格位置重复创建14次单选按钮,最终只显示最后一次创建的内容
  • 取按钮文本时固定使用bs[r],r的范围只有0~6,只会遍历列表前7个元素,无法覆盖全部14个选项

修正后代码

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.geometry('400x400')
bs = ['Skin and Soft Tissue', 'Bone and Joint', 'Central Nervous System', 'Genito-Urinary', 
      'Gastrointestinal', 'Cardiovascular', 'ENT', 'Gynaecological Infections', 
      'Intravascular access Device', 'Sexual Transmitted Infections', 'Pregancy Associated Sepsis', 
      'Respiratory', 'Lyme Disease', 'Splenectomy/Functional Asplenia']
n = tk.StringVar()
nrows = 7
ncols = 2

for r in range(nrows):
    for c in range(ncols):
        # 计算当前网格对应的列表索引
        idx = r * ncols + c
        tk.Radiobutton(root, text=bs[idx], variable=n, value=bs[idx]).grid(row=r, column=c, sticky='w')

root.mainloop()

实现逻辑

通过行号r和列号c计算对应列表下标:idx = r * 列数 + c,刚好可以按行优先顺序遍历完14个列表元素,每个网格位置仅创建1个对应内容的单选按钮,sticky='w'参数可以让所有按钮左对齐,避免因为文本长度不同导致布局错乱,最终得到7行2列的完整单选网格。

内容的提问来源于stack exchange,提问作者Lord_Amenegg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:24:07