Tkinter/CustomTkinter问题:StringVar.get()失效,如何实现返回字符串的函数?
问题分析与解决方案
核心问题拆解
你的代码存在两个关键错误,导致你误以为ctk.StringVar的get()方法不可用:
- 按钮command参数调用方式错误:直接写
get_var(entry_var)会在程序启动时立即执行函数,而非点击按钮时触发。此时输入框无内容,且函数无返回值,容易让你误认为是get()方法失效。 - 函数
get_var缺少返回值:仅调用input.get()但未用return返回结果,即便正常调用也无法获取字符串。
另外代码还遗漏了根窗口root的初始化语句,且entry_box = ...grid(...)的写法会让变量指向None(grid()方法返回None),后续若要操作输入框会出错。
关于ctk.StringVar的说明
ctk.StringVar是CustomTkinter对tk原生tk.StringVar的封装,完全继承了原生变量的所有方法(包括get()和set()),不存在无法识别get()方法的情况。若你的环境出现此问题,大概率是CustomTkinter版本过旧,执行pip install --upgrade customtkinter更新即可。
同时,tk.StringVar可完全作为CTkEntry的textvariable参数使用,CustomTkinter组件兼容所有tkinter原生变量类型,两种变量都能正常绑定输入框。
修正后的代码示例
import customtkinter as ctk import tkinter as tk def get_var(input_var): # 添加return返回获取到的字符串 value = input_var.get() print(value) # 可替换为你的业务处理逻辑 return value # 初始化根窗口 root = ctk.CTk() entry_var = ctk.StringVar() # 分开执行grid,保留输入框的引用 entry_box = ctk.CTkEntry(root, textvariable=entry_var) entry_box.grid(row=0, column=0, padx=10, pady=10) # 用lambda表达式传递参数,确保点击按钮时才执行函数 submit_button = ctk.CTkButton( root, text="Submit entry", command=lambda: get_var(entry_var) ) submit_button.grid(row=1, column=0, padx=10, pady=10) root.mainloop()
关键修改点
- 补全根窗口初始化代码
- 将组件创建与
grid()方法分离,保留组件引用 - 使用
lambda表达式作为command参数,实现点击按钮时调用带参函数 - 给
get_var函数添加返回值,确保能获取输入的字符串
内容的提问来源于stack exchange,提问作者Canoe
相关产品推荐
相关产品推荐

