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
相关产品推荐
相关产品推荐

