2014-10-03 59 views
-3

我目前正在写一个挂人游戏。使用Tkinter进行GUI。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

player2不存在guess命名空间。在函数之间共享数据的典型方法是使用一类:

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 2014-10-04 09:40:56

+0

app = App() app.startgame()。在即将出现的代码中,如果我想要一个按钮进入某个函数,是否需要替换:mbutton = Button(text =“Press to start game”,command = startgame).place(x = 123,y = 100) – Angus 2014-10-04 09:41:47

0

您必须将它作为参数传递给函数。

为此在tkinter看看这个答案:https://stackoverflow.com/a/6921225/1165441

所有你需要做的是使用你想要的参数调用你的功能一个lambda。

您将需要重新安排你的代码位,但该命令属性将是这样的:

command=lambda: guess(paramYouWantToPass) 

编辑:我要说的是,张贴@mgilson答案是解决比较正确的做法您问题,但了解如何使用lambdas将参数传递给tkinter命令回调,您应该理解这一点。

相关问题