使用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
相关产品推荐
相关产品推荐

