StringVar ()로 TKinter (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 () 메서드를 사용하려고 할 때 'numSamplesTxt'가 정의되지 않았다는 오류가 표시됩니다. 이 코드가 아닌 기본 코드에서 작동하는 이유를 모르겠지만 개체 범위와 관련이있는 유사한 문제라고 가정하고 있습니다.

브라이언 오클리

문제는 모든 변수를 초기화하기 전에 트레이스를 설정하고 있다는 것입니다. 스크립트의 맨 아래로 추적을 이동하십시오.

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

root.mainloop()

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관