Python for循环中如何使用动态变量名操作tkinter输入框
Tkinter 循环批量获取Entry值分组计算方案
问题说明
你在使用tkinter开发GUI时,已定义8个Entry输入框对象,变量名如下:
b1_entry b2_entry b3_entry b4_entry c1_entry c2_entry c3_entry c4_entry
需要按序号匹配b组和c组输入框取值计算,结果分别对应f1~f4四个变量,供后续组件展示。你尝试通过字符串拼接动态生成变量名的写法存在语法错误,原错误示例如下:
# 错误写法,无法直接执行 for i in range (2, 5): f + str('i') = 'b' + str(i).get() + 'c' + str(i).get()
注:原代码range(2,5)仅会遍历2、3、4三个序号,会漏掉i=1的分组,若要覆盖1~4全部分组,范围需写为range(1,5)。
实现代码
推荐方案:字典存储结果(可维护性最高)
不建议动态生成零散的独立变量,用字典统一存储结果更方便后续遍历、更新,避免命名冲突:
# 批量取值计算逻辑 f = {} for i in range(1, 5): # 动态获取对应序号的Entry对象 b_entry = globals()[f"b{i}_entry"] c_entry = globals()[f"c{i}_entry"] # 取值后替换为你实际需要的计算逻辑,示例为字符串拼接,数值计算可转int/float后运算 f[i] = b_entry.get() + c_entry.get() # 调用方式:f[1]对应原需求的f1,f[2]对应f2,以此类推 # 示例:给其他展示组件插入值 # show_entry1.insert(0, f[1])
类内封装场景适配
如果你的GUI代码是封装在类中的,不要用globals()获取对象,改用getattr获取实例属性即可:
class TkinterApp: def calc_group_value(self): self.f = {} for i in range(1, 5): b_entry = getattr(self, f"b{i}_entry") c_entry = getattr(self, f"c{i}_entry") self.f[i] = b_entry.get() + c_entry.get()
兼容方案:强制生成f1~f4独立变量(不推荐)
如果你因为历史代码逻辑必须要生成f1、f2这类独立命名的变量,可以通过全局变量字典动态赋值:
for i in range(1, 5): b_val = globals()[f"b{i}_entry"].get() c_val = globals()[f"c{i}_entry"].get() globals()[f"f{i}"] = b_val + c_val # 执行后可直接调用f1、f2、f3、f4变量
内容的提问来源于stack exchange,提问作者Muhammad Farzan Bashir
相关产品推荐
相关产品推荐

