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

如何在Tkinter中获取Frame的行索引?解决grid_info报KeyError:'row'问题

报错原因
  1. 函数提前执行:初始代码中给按钮command参数赋值时直接写了AddRemove(1)/AddRemove(2),这不是把函数绑定到点击事件,而是在创建按钮的那一刻就直接执行了AddRemove函数。此时buttonFrame还没有执行.grid()方法完成布局,调用.grid_info()会返回空字典,自然不存在row键,触发KeyError。
  2. 无布局调用grid_info:只要组件没有通过.grid()方法放置到父容器中(或调用过.grid_forget()移除了布局),.grid_info()都会返回空字典,此时直接取row键就会报错。
解决方法
  • 修正按钮事件绑定:给需要传参的回调函数包裹lambda,实现点击按钮时才执行函数,初始代码的按钮定义修改为:
# 添加玩家按钮
addPlayer = Button(buttonFrame, text="Adicionar jogador", command=lambda: AddRemove(1))
addPlayer.grid(column=1, row=0)

# 移除玩家按钮
removePlayer = Button(buttonFrame, text="Remover jogador", command=lambda: AddRemove(2))
removePlayer.grid_forget()
  • 增加容错判断:调用grid_info取行号前先判断返回结果是否为空,避免报错:
info = buttonFrame.grid_info()
if not info:
    # 组件还未布局,直接返回或给默认行号
    return
row = info['row']
  • 修正代码其他优化点:
    • 不要在AddRemove函数中重复创建addPlayer/removePlayer按钮,直接操作已经实例化的全局按钮对象调用grid()/grid_forget()即可,避免出现按钮重叠问题。
    • grid布局的组件优先使用.grid_forget()移除布局,不要用通用的.forget(),减少逻辑歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 01:24:01