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

2024-09-29 17:44:15 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,所以我试着,每次用户更新输入框中的值时,从输入中计算一个新值,并用标签显示。在

但是,不管我怎么做,我都有一些问题,通过将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()方法时未定义“numSamplesText”。我不知道为什么它与我的主代码一起工作,而不是这个代码,但是我假设这是一个类似的问题,它与对象的范围有关?在


Tags: 方法代码定义def错误root标签fs
1条回答
网友
1楼 · 发布于 2024-09-29 17:44:15

问题是在初始化所有变量之前设置跟踪。将跟踪移到脚本底部:

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

root.mainloop()

相关问题 更多 >

    热门问题