1

我正在创建一个 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。

4

1 回答 1

2

有两种方法可以获取条目小部件的值:

  1. 您调用get小部件上的方法,例如:the_widget.get()
  2. 如果您分配了一个文本变量,您可以调用该文本变量的get方法,例如:the_variable.get()

要使其中任何一个起作用,您必须具有对 1) 小部件或 2) 文本变量的引用。

在您的代码中,您犯了一个常见错误,即结合小部件创建和小部件布局。这导致entryTheta设置为None

当您执行类似的操作foo=bar().baz()时,存储的foo内容是最终函数的结果,baz(). 因此,当您这样做时entryTheta = Entry(textvariable=thetaVar).place(x=90, y=202)entryTheta将设置为调用的结果,该结果place将始终为None.

简单的解决方案是调用place单独的语句(您还应该认真重新考虑使用place--pack并且grid功能更强大,并且会给您更好的调整大小行为。)

于 2013-03-18T14:06:57.633 回答