python tkinter从命令中使用的函数返回值
如何获取从A到C的返回值?顺便说一下,我不是在上课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
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)
(………..及守则的其余部分)