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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:22:39