这段代码的想法是,用户按下第一个按钮并输入他们想要的内容,然后按下第二个按钮并将其打印出来。有人可以告诉我为什么我的退货声明不起作用?它说'变量'没有定义。提前感谢您花时间阅读我的问题。
from tkinter import*
def fun():
variable = input('Enter Here:')
return variable
def fun_2():
print(variable)
window = Tk()
button = Button(text = 'Button', command = fun )
button2 = Button(text = 'Button2', command = fun_2 )
button.pack()
button2.pack()
window.mainloop()
答案 0 :(得分:2)
fun()
可能会返回一个值,但是Tkinter按钮不会执行具有该返回值的任何内容。
请注意,我使用短语返回值,而不是返回变量。 return
语句传回表达式的值,而不是variable
变量。因此,variable
变量不会成为其他函数可以访问的全局变量。
在这里,您可以将variable
设为全局,并告诉fun
设置全局:
variable = 'No value set just yet'
def fun():
global variable
variable = input('Enter Here:')
由于您确实使用了fun2
,variable
中的任何作业,因此现在已经将其设置为全局,现在它将成功打印variable
的值,因为它现在可以找到那个名字。
答案 1 :(得分:2)
在python中,当你在函数内部创建一个变量时,它只在该函数中定义。因此其他功能将无法看到它。
在这种情况下,您可能希望在对象中有一些共享状态。类似的东西:
class MyClass:
def fun(self):
self.variable = input('Enter Here:')
def fun_2(self):
print(self.variable)
mc = MyClass()
window = Tk()
button = Button(text = 'Button', command = mc.fun )
button2 = Button(text = 'Button2', command = mc.fun_2 )
button.pack()
button2.pack()
答案 2 :(得分:0)
问题出在fun2()
中。它不会将variable
作为输入参数。
def fun_2(variable):
print(variable)
但请注意,您必须使用适当的参数调用fun_2。此外,正如现在的功能一样,如果您只是在其中进行打印,那么使用该功能几乎没有意义。
带走消息:变量在Python中不是全局变量,因此您必须将它传递给想要使用它的每个函数。