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

如何在Tkinter类Excel表格中实现类似Active.cell的行号获取

获取Tkinter激活Entry的行号实现重计算

要实现修改Entry后重计算,核心是追踪当前激活的Entry控件并获取其行号,用grid_info()就能做到,具体步骤如下:

1. 调整代码,保存Entry控件对象

原来的代码只存了StringVar,现在要把Entry控件本身存起来,因为grid_info()是控件的方法:

entriesPI1 = []  # 改为存储Entry控件,而非StringVar
for i in range(5,20):
    varlayer1pi = tk.StringVar()
    b = tk.Entry(newtab1, textvariable=varlayer1pi, background='#87CEEB')
    b.grid(row=i, column=6, sticky='NSEW')
    # 绑定焦点事件,追踪激活的Entry
    b.bind("<FocusIn>", on_entry_focus)
    entriesPI1.append(b)  # 保存控件实例

2. 追踪当前激活的Entry

定义一个全局变量存储当前获得焦点的Entry,通过<FocusIn>事件更新:

current_active_entry = None

def on_entry_focus(event):
    global current_active_entry
    current_active_entry = event.widget  # 拿到触发事件的Entry控件

3. 重计算时获取行号并执行逻辑

在重计算函数里,通过grid_info()提取行号,然后编写你的计算逻辑:

def recalculate():
    global current_active_entry
    if not current_active_entry:
        return  # 没有激活的Entry就不执行
    # 从grid_info()里取行号
    row_num = current_active_entry.grid_info()['row']
    # 这里写你的重计算逻辑,比如:
    current_value = current_active_entry.get()
    print(f"修改的行号:{row_num},当前值:{current_value}")
    # 示例:更新该行或其他行的计算结果
    # entriesPI1[row_num - 5].set(str(float(current_value)*2))  # 假设行号从5开始,对应列表索引0

4. 触发重计算的方式

可以给Entry绑定回车键,按下就触发计算:
在生成Entry的循环里加一行:

b.bind("<Return>", lambda e: recalculate())

或者加一个按钮手动触发:

calc_btn = tk.Button(newtab1, text="重计算", command=recalculate)
calc_btn.grid(row=20, column=6, sticky='NSEW')

关键点说明:

  • 必须操作Entry控件实例,StringVar没有grid_info()方法
  • <FocusIn>事件会在Entry获得焦点时触发,相当于VB里的ActiveCell
  • grid_info()返回的字典中,'row'对应控件所在的行号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:07:08