2014-10-03 3 views
-3

현재 행맨 게임을 작성 중입니다. GUI 용 Tkinter 사용.Python - 함수에서 문자열을 얻는 방법?

어떻게 함수에서 문자열을 얻을 수 있습니다 :

def startgame(): 
    player21abel=Label(text=" Guess a Letter  ",fg="black").place(x=10,y=60) 
    mbutton=Button(text=" Press to summit ",command=guess).place(x=220,y=100) 
    player2=StringVar() 
    player2input=Entry(textvariable=player2).place(x=220,y=56) 
    test="" 
    uetext=utext.get() 


def guess(): 
    test=player2.get() 
    test="" 
    player2=StringVar 
    print (test) 

내가 오류를 얻을 :

line 16, in guess
test=player2.get()
UnboundLocalError: local variable 'player2' referenced before assignment

내가 기능 추측에 player2input 및 프로세스를에서 텍스트 상자에 입력을 싶어. 그러나 그것은 그것을 문자열로 인식하지 못합니까 ??

답변

0

player2guess 네임 스페이스에 없습니다. 다음과 같이

class App(object): 
    def __init__(self): 
     self.master = Tk() 
    def startgame(): 
     player21abel=Label(self.master, text=" Guess a Letter  ",fg="black") 
     player2label.place(x=10,y=60) 
     mbutton=Button(self.master, text=" Press to summit ",command=self.guess) 
     mbutton.place(x=220,y=100) 
     self.player2=StringVar() 
     player2input=Entry(self.master, textvariable=self.player2) 
     player2input.place(x=220,y=56) 
     test="" 
     uetext=utext.get() 


    def guess(): 
     test=self.player2.get() 
     test="" 
     self.player2=StringVar 
     print (test) 

그런 다음 당신이 그것으로 작동 것 : 기능 사이에 데이터를 공유 할 수있는 일반적인 방법은 클래스를 사용하는 것입니다 당신은뿐만 아니라 다른 버그의 번호를 가지고

app = App() 
app.startgame() 

주 - - 상위 위젯을 레이블/항목/버튼에 전달하지 않았으므로 일반적으로 위젯을 작성한 다음 다른 행에서 기하학 관리자를 사용해야합니다. 그렇지 않으면 참조가 모두 None이됩니다. 예 :

foo = button(master, ...).grid(...) # Wrong: foo is None!!! 

foo = button(master, ...) 
foo.grid(...) # right, foo is a tkinter Widget. 
+0

죄송합니다. 나는이 명령으로 작업하는 것이 무엇을 의미하는지 알지 못합니다. – Angus

+0

app = App() app.startgame(). 다가오는 코드에서, 버튼을 함수에 넣고 싶으면, mbutton = Button (텍스트 = "게임을 시작하려면 누르십시오", command = startgame) .place (x = 123, y = 100) – Angus

0

매개 변수로 함수에 전달해야합니다. https://stackoverflow.com/a/6921225/1165441

당신이해야 할 모든 당신이 원하는 매개 변수로 함수를 호출하는 람다를 사용할 수 있습니다 :

는 모습이 대답을 tkinter에서이 작업을 수행합니다.

당신은 당신의 코드 비트를 재 배열해야하지만 명령 속성은 다음과 같이 표시됩니다

command=lambda: guess(paramYouWantToPass) 

편집 : 나는 @mgilson에 의해 게시 대답은 해결하기보다 올바른 방법이라고 말할 것이다 당신의 문제는 아니지만 lambdas를 사용하여 tkinter 명령 콜백에 매개 변수를 전달하는 방법을 이해하는 것도 이해해야합니다.

관련 문제