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

使用Tkinter选择值后返回PY_VAR0而非数字的问题排查

问题分析与解决

嘿,我一眼就瞅出问题啦!你虽然写了v.get(),但根本没用到它的返回值,反而直接打印了v这个StringVar对象本身,这就是为啥你看到PY_VAR0的原因~

问题出在哪?

看你写的ok()函数:

def ok():
    v.get()
    print(v)

这里的v.get()确实调用了获取值的方法,但你只是调用了它,没把结果存下来,也没直接打印这个结果。而print(v)打印的是Tkinter的StringVar对象本身,PY_VAR0是这类对象的默认标识,不是你选中的实际数值。

修复后的代码

只需要修改ok()函数,要么直接打印v.get()的结果,要么把结果存到变量里再打印:

from tkinter import *
def f1():
    fenetre1 = Tk()
    fenetre1.title("Ma fenetre") # titre de la fenêtre
    texte3 = Label(fenetre1, text='Nombre de cases par ligne/colonne :')
    texte3.pack()
    listeoptions = []
    for i in range(10, 21):
        listeoptions.append(i)
    v = StringVar(fenetre1)
    v.set(listeoptions[0])
    w = OptionMenu(fenetre1, v, *listeoptions)
    w.pack()
    def ok():
        # 直接打印获取到的选中值
        print(v.get())
        # 或者先存到变量里再用
        # selected_num = v.get()
        # print(selected_num)
    button = Button(fenetre1, text="Jouer", command=ok)
    button.pack(side=BOTTOM)
    fenetre1.mainloop()
f1()

小补充

Tkinter的StringVar(还有IntVar、DoubleVar这些)是专门用来绑定GUI元素的特殊变量,它们的作用是跟踪元素值的变化。要拿到它存储的实际内容,必须调用.get()方法;反过来如果要设置值,就用.set(新值)。直接操作变量本身只会得到对象的标识,不是你要的用户选择内容哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:03:41