我正在创建一个GUI,变量正在发生。
它首先计算一个值theta,当我点击一个按钮时,它会被传递给一个Entry字段(这是用函数thetaVar.set(CalcTheta(grensVar.get(), data[:,1], data[:,2]))
写的)。
thetaVar = IntVar()
def callbackTheta(name, index, mode):
thetaValue = nGui.globalgetvar(name)
nGui.globalsetvar(name, thetaValue)
wtheta = thetaVar.trace_variable('w', callbackTheta)
rtheta = thetaVar.trace_variable('r', callbackTheta)
entryTheta = Entry(textvariable=thetaVar).place(x=90, y=202)
这是有效的(我在Entry字段中看到了值),但是当我稍后尝试获取此值时,它不起作用。 我相信我已经尝试了一切:
thetaVar.get() # with print, returns the integer 0, this is the initial value
# that is displayed, even though at that moment it shows 0.4341.
thetaVar # with print, returns 'PY_VAR3'
thetaValue # with print, global value not defined
entryTheta.get() # AttributeError: 'NoneType' object has no attribute 'get'
rtheta # print returns: 37430496callbackTheta
我不明白这个值的存储位置以及如何在另一个函数中使用该条目的值。即使我在实际.set
之后尝试其中任何一项,我似乎也无法在此之后打印条目的这个特定值。
在Windows 8上使用tkinter和Python 3.3。
答案 0 :(得分:2)
有两种方法可以获取条目小部件的值:
get
方法,例如:the_widget.get()
get
方法,例如:the_variable.get()
要使其中任何一个起作用,您必须引用1)窗口小部件,或2)textvariable。
在您的代码中,您犯了一个常见的错误,即组合小部件创建和小部件布局。这会导致entryTheta
设置为None
。
当您执行foo=bar().baz()
之类的操作时,foo
中存储的内容是最终函数baz()
的结果。因此,当您执行entryTheta = Entry(textvariable=thetaVar).place(x=90, y=202)
时,entryTheta
设置为place
调用的结果,该调用始终为None
。
简单的解决方案是在单独的声明中调用place
(您还应该认真重新考虑使用place
- pack
和grid
更强大并会给你更好的调整大小的行为。)