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

如何根据用户选择的数量创建对应数量的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:57:16