如何根据用户选择的数量创建对应数量的Tkinter Entry组件
解决方案
以下是实现需求的完整代码,核心是给提交按钮绑定回调逻辑,获取选中的参赛人数后动态生成对应数量的姓名输入框:
import tkinter as tk from tkinter import IntVar, Label, Radiobutton, Button, Entry, messagebox def enter_numberofitems1(): # 创建参赛人数选择窗口 select_screen = tk.Tk() select_screen.geometry("1000x500") select_screen.title("选择参赛人数") Label(select_screen, text="选择参赛选手/队伍数量", bg="yellow", width="300", height="5", font=("Calibri", 20)).pack() selected_num = IntVar() # 用循环批量生成单选按钮,减少重复代码 for num in [4, 8, 16, 32, 64]: Radiobutton(select_screen, text=str(num), variable=selected_num, value=num, height="2", width="10", fg="green", font=("Calibri", 10)).pack() def on_submit(): # 获取用户选中的人数 player_count = selected_num.get() if not player_count: messagebox.showwarning("提示", "请先选择参赛人数") return # 关闭当前选择窗口 select_screen.destroy() # 打开姓名输入窗口 create_name_input_window(player_count) Button(select_screen, text="提交", height="5", width="30", bg="green", command=on_submit).pack() select_screen.mainloop() def create_name_input_window(count): # 创建姓名输入窗口 input_screen = tk.Tk() input_screen.geometry("800x600") input_screen.title(f"输入{count}位选手姓名") Label(input_screen, text=f"请输入{count}位选手的姓名", font=("Calibri", 16)).pack(pady=20) # 存储所有输入框组件,方便后续收集内容 entry_list = [] for i in range(count): frame = tk.Frame(input_screen) frame.pack(pady=5) Label(frame, text=f"选手{i+1}:", font=("Calibri", 12)).pack(side=tk.LEFT, padx=10) entry = Entry(frame, font=("Calibri", 12), width=30) entry.pack(side=tk.LEFT) entry_list.append(entry) def save_names(): # 收集所有选手姓名 player_names = [entry.get().strip() for entry in entry_list] # 这里可扩展保存逻辑,比如写入文件或传递给后续锦标赛逻辑 print("选手名单:", player_names) messagebox.showinfo("成功", "选手姓名已提交") Button(input_screen, text="确认提交", bg="green", font=("Calibri", 12), command=save_names).pack(pady=30) input_screen.mainloop() # 启动程序 if __name__ == "__main__": enter_numberofitems1()
关键修改说明:
- 给提交按钮绑定
on_submit回调,实现获取选中人数、关闭当前窗口、跳转至姓名输入界面的逻辑 - 新增
create_name_input_window函数,根据传入的人数动态生成对应数量的输入框 - 优化单选按钮创建方式,用循环减少冗余代码
- 添加未选择人数的提示,以及收集并输出选手姓名的功能
- 规范变量命名,提升代码可读性
内容的提问来源于stack exchange,提问作者MicrowaveBurrito
相关产品推荐
相关产品推荐

