无法通过StringVar()/IntVar()获取输入值,仅得到''/0求排查
问题分析与解决:使用StringVar/IntVar获取输入框值为空的问题
核心错误原因
你在创建输入框后立即执行了pn = self.product_name_input.get()和pp = self.product_price_tv.get(),此时用户还未在输入框中输入任何内容,这两个变量存储的是输入框/变量的初始值(空字符串''和0)。后续点击按钮时,lambda传递的是这个提前固定的旧值,而非用户输入后的实时值。
修正方案
提供两种可行的修改方式:
方式一:在回调函数内实时获取值
直接在点击按钮时读取输入框或变量的当前值,无需提前存储:
# 修改add_products_to_db函数,去掉参数,内部实时取值 def add_products_to_db(): pn = self.product_name_input.get() # 也可以用self.product_name_tv.get() pp = self.product_price_tv.get() print(pn, pp) # 按钮command直接绑定函数,无需lambda传参 self.submit_product_btn = ctk.CTkButton(new_window,text="Submit",command=add_products_to_db)
方式二:在lambda中实时传递当前值
如果需要保留参数传递的写法,在lambda里直接调用获取值的方法,传递实时结果:
# 保持add_products_to_db带参数的写法 def add_products_to_db(pn,pp): print(pn,pp) # lambda内实时获取当前值并传递 self.submit_product_btn = ctk.CTkButton(new_window,text="Submit",command=lambda : add_products_to_db(self.product_name_input.get(), self.product_price_tv.get()))
额外建议
代码中存在一个变量名笔误:第二个输入框对应产品价格,但变量名是self.seller_mobile_input,建议改为self.product_price_input,避免后续维护混淆。
内容的提问来源于stack exchange,提问作者bhh547
相关产品推荐
相关产品推荐

