2012-10-27 48 views
7

我如何获得返回值A到C?顺便说一下,我没有使用课堂。python tkinter从命令中使用的函数返回值

def button: 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    return A 

B = StringVar() 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 

回答

3

你可以称之为C.setbutton函数中:

def button: 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    C.set(A) 
    # return A # return values are useless here 
7

简短的回答:你不能。回调不能返回任何东西,因为没有地方可以返回它 - 除了事件循环,它不会对返回值做任何事情。

在基于事件的应用程序中,您通常要做的是在类上设置属性。或者,如果你是初学者,你可以设置一个全局变量。使用全局变量对于需要随时间维护的实际代码并不是一个好主意,但对于实验来说可以。

因此,举例来说,由于C似乎是在你的例子一个全局变量,你会做这样的事情:

def button(): 
    global C 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    C = A 
2

很容易只是声明了一个全球性。

def button: 
global A 
mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
A = B.get() 
return A 

B = StringVar()` 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 
# and then A is not empty 
B= A 
0

老问题,但大多数答案建议一个全局变量。我不喜欢在我的项目中使用太多的全局变量,所以这是我的解决方案。

当声明Tkinter按钮时,可以使用lambda函数作为命令。这个lambda可以与您定义的按钮位于相同名称空间内的变量进行交互。确保在初始化按钮之前定义这个变量。

def button(): 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    return A 

B = StringVar() 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = lambda: C=button()).grid(row = 1, column = 1) 

您可能需要有self为根据您的项目组织的论据button,但概念是相同的。 Lambda命令对于将参数传递给按钮命令也很有用。