Tkinter中创建使用变量时Entry输入值传递给按钮命令为空如何解决
问题原因
Python lambda的默认参数值是函数定义阶段就计算完成的,不是函数运行阶段才计算。你当前的写法在创建按钮时就执行了variable1.get(),这时候用户还没有在输入框填写内容,拿到的自然是空值。你注释掉的测试代码之所以能正常打印,是因为把get()放在了lambda的执行体内,点击按钮的时候才会执行获取操作,自然能拿到用户输入的最新值。
解决方法
把variable1.get()移动到lambda的函数体内部即可,修改后的代码如下:
def menu3A(): variable1= StringVar() ttk.Entry(root, width=7, textvariable=variable1).grid(column=2, row=1) ttk.Label(root, text="Enter Filename: ").grid(column=1, row=1) # 修正lambda写法,get操作放在点击执行的函数体内 ttk.Button(root, text="Enter", command= lambda: finance.CSV_Finance_Tool(variable1.get())).grid(column=2, row=13)
改动说明
- 移除了lambda的默认参数
FileName=variable1.get(),避免创建按钮时提前执行获取操作 - 将
variable1.get()直接放在调用CSV_Finance_Tool的参数位置,点击按钮时才会实时获取输入框的当前内容
内容的提问来源于stack exchange,提问作者Rachel Liane
相关产品推荐
相关产品推荐

