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

Tkinter中Entry组件无法获取绑定IntVar值的技术问题

解决Tkinter Entry绑定IntVar无法获取值的问题

问题根源

你的代码存在几个关键问题,导致无法正常获取IntVar的值:

  • 重复嵌套定义了func_20_Matrix(),属于语法错误,直接破坏了函数内部逻辑的执行。
  • 创建了多个tk.Tk()实例,tkinter应用只能存在一个主窗口,新窗口必须用tk.Toplevel(),否则会打乱变量的绑定关系。
  • root.destroy()在rootMatr.mainloop()前执行,可能提前销毁主窗口,影响后续变量读取。

修正后的代码

import tkinter as tk

def func_20_Matrix():
    rootMatr = tk.Tk()
    rootMatr.title('Matrix Solve')
    rootMatr.geometry('+550+100')
    
    metrix_Size_X = tk.IntVar()
    metrix_Size_Y = tk.IntVar()
    
    def matrix_Size():
        # 用Toplevel创建子窗口,而非新的Tk实例
        matrix_Solve_root = tk.Toplevel(rootMatr)
        matrix_Solve_root.title('Matrix Solve')
        matrix_Solve_root.geometry('+600+150')
        
        # 现在可以正常获取IntVar的值
        print(metrix_Size_X.get(), metrix_Size_Y.get())
        tk.Label(matrix_Solve_root, text='SEE').grid()
    
    tk.Label(rootMatr, text='', height=3).grid()
    tk.Label(rootMatr, text='Matrix Calculator', font=('ariel',20,'bold'), justify='center').place(relx=.5, rely=.2, anchor='center')

    tk.Label(rootMatr, text='Choose X Matrix : ').grid(row=1, column=0)
    tk.Entry(rootMatr, textvariable=metrix_Size_X, width=6).grid(row=1, column=1)

    tk.Label(rootMatr, text=' x ').grid(row=1, column=2)

    tk.Label(rootMatr, text='Choose Y Matrix : ').grid(row=1, column=3)
    tk.Entry(rootMatr, textvariable=metrix_Size_Y, width=6).grid(row=1, column=4, padx=(0,5))

    tk.Label(rootMatr, text='', height=3).grid()
    tk.Button(rootMatr, text='Complete XY Matrix', command=matrix_Size).place(relx=.5, rely=.8, anchor='center')

    # 若需关闭原主窗口,建议放在mainloop之后执行
    # root.destroy()
    rootMatr.mainloop()

# 调用测试
func_20_Matrix()

关键修改说明

  1. 移除重复的嵌套函数定义,修复语法错误。
  2. 将子窗口的tk.Tk()替换为tk.Toplevel(rootMatr),让子窗口依附于主窗口,保证变量绑定关系正常。
  3. 删除子窗口的mainloop()调用,主窗口的mainloop()会处理所有事件循环。
  4. 注释掉可能提前销毁主窗口的root.destroy(),如需关闭原窗口,建议放在主窗口mainloop()之后执行。

额外提示

如果用户在Entry中输入非整数内容,IntVar.get()会返回0,可通过validatecommand添加输入验证,确保用户只能输入整数:

# 示例:添加整数输入验证
def validate_input(new_value):
    return new_value.isdigit() or new_value == ""

validate_cmd = rootMatr.register(validate_input)
tk.Entry(rootMatr, textvariable=metrix_Size_X, width=6, validate="key", validatecommand=(validate_cmd, '%P')).grid(row=1, column=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:30:13