python tkinter从命令中使用的函数返回值

时间:2012-10-27 11:49:46

标签: python python-3.x tkinter

如何获得返回值A到C?顺便说一句,我不是在上课。

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)

6 个答案:

答案 0 :(得分:11)

简短的回答:你做不到。回调函数无法返回任何内容,因为除了事件循环之外没有任何地方可以返回它 - 它不会对返回值执行任何操作。

在基于事件的应用程序中,您通常要做的是在类上设置属性。或者,如果您是初学者,则可以设置全局变量。使用全局变量对于必须在一段时间内保持的实际代码不是一个好主意,但它可以用于实验。

因此,例如,由于C在您的示例中似乎是一个全局变量,您可以执行以下操作:

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

答案 1 :(得分:4)

您可以在C.set函数中调用button

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

答案 2 :(得分:1)

很容易宣布A是全球性的。

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

答案 3 :(得分:1)

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

声明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命令对于将参数传递给按钮命令也很有用。

答案 4 :(得分:0)

您创建 Tkinter.Tk 的子类,并在该类中定义成员变量 self.A 。然后你可以通过

模仿回归行为
self.A = B.get()

请参阅Return values of Tkinter text entry, close GUI

答案 5 :(得分:0)

答案3是最好的选择。

但是我认为这会发生一些错误(也许在python 3中)。

您必须写:

 Submit = Button(myGui, text = "Submit", command = lambda:C==button()).grid(row 
 = 1, column = 1)

在“ lambda:C == ...”中查找双引号“ ==”。

可以。

所以代码应该是:

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)

(.............以及其余代码)