繁体   English   中英

使用StringVar()更新TKinter(Python)标签-变量未定义错误(可能是作用域问题?)

[英]Updating TKinter (Python) label with StringVar() - Variable not defined error (possible scope issue?)

好的,我想每次用户更新输入框中的值时,从输入中计算出一个新值并用标签显示它。

但是,我遇到了一些问题,无论如何操作,方法都是将StringVar()变量绑定到标签,然后通过.set()方法进行更新。 或通过使用标签本身的.config(text =“”)方法。 它引发一个错误,提示我的stringVar()变量尚未定义或标签未定义。

这是我的代码的简化版本:

def calculateFreqResolution ():
  #calculate stuff from user input
  N=numSamplesTxt.get() # number of samples
  Fs=freqTxt.get() #sampling frequency

  N=int(N) #cast them as ints
  Fs=int(Fs)
  res=Fs/N

  ###After done calculating display it
  freqRes.set(res) #DOESN'T LIKE THIS LINE


def callbackNumSamples (numSamples):
  ##code here validates input into entry box, if valid then calculates then calls calculateFreqResolution()
  calculateFreqResolution()


def callbackFreq (frequency):
  ##code here validates input into entry box, if valid then calculates then calls calculateFreqResolution()
  calculateFreqResolution()

root=Tk()

freqRes=StringVar()
freqRes.set(1)

freqResCalcLabel=Label(root, textvariable=freqRes)
freqResCalcLabel.grid(row=5, column=1, pady=2, padx=6)


frequency=StringVar() 
frequency.trace("w", lambda name, index, mode, frequency=frequency: callbackFreq(frequency))

freqTxt=Entry(root,textvariable=frequency, justify=CENTER) 
freqTxt.insert(0, 1000)

numSamples=StringVar()
numSamples.trace("w", lambda name, index, mode, numSamples=numSamples: callbackNumSamples(numSamples))

numSamplesTxt=Entry(root, textvariable=numSamples, justify=CENTER)
numSamplesTxt.insert(0,1000)

root.mainloop()

我得到的错误是“ freqRes”尚未定义,尽管我已经按照此处的定义进行了定义。

在此简化的代码版本中,它还给我一个错误,指出尝试使用.get()方法时未定义'numSamplesTxt'。 我不知道为什么它与我的主代码而不是我的代码一起工作,但是我假设这与对象的范围有关,这是一个类似的问题?

问题在于,在初始化所有变量之前要设置跟踪。 将迹线移到脚本的底部:

...
frequency=StringVar() 
numSamples=StringVar()
freqTxt=Entry(...) 
numSamplesTxt=Entry(...)
...
frequency.trace("w", ...)
numSamples.trace("w", ...)

root.mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM