Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python tkinter从命令中使用的函数返回值_Python_Python 3.x_Tkinter - Fatal编程技术网

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

python tkinter从命令中使用的函数返回值,python,python-3.x,tkinter,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, tex

如何获取从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)

您可以在
按钮
功能中调用
C.set

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

简单回答:你不能。回调无法返回任何内容,因为没有任何地方可以返回它——除了事件循环,它对返回值没有任何作用

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

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

def button():
    global C
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0)
    A = B.get()
    C = 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

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

声明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
作为
按钮的参数,但概念是相同的。Lambda命令在向按钮命令传递参数时也很有用。

您创建一个子类Tkinter.Tk,并在该类中定义一个成员变量self.a。然后,您可以通过以下方式模拟返回行为:

self.A = B.get()

请参见,

答案3是最佳选项

但我认为这会发生一点错误(可能在Python3中)

你必须写:

 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)
(………..及守则的其余部分)