Python Script - TK问题- TK不能在函数中工作



我在这里遇到了一个问题。我需要在DEF中使用它,以便在脚本中的不同位置调用它。但是当我这样做时,Command函数不再识别TK元素。为了更好地解释,我编写了2个代码。第一个工作完美。第二种,TK在函数内部。第二个不行

脚本ok,下面

from tkinter import *
fenster = Tk()
fenster.title("Window")
def switch():
b1["state"] = DISABLED
#--Buttons
b1=Button(fenster, text="Button")
b1.config(height = 5, width = 7)
b1.grid(row=0, column=0)
b2 = Button(text="disable", command=switch)
b2.grid(row=0,column=1)
fenster.mainloop()

这里,不是ok代码,在函数内部。这就给出了de errorNameError: name 'b1' is not defined

from tkinter import *
def switch():
b1["state"] = DISABLED
def funcao():
fenster = Tk()
fenster.title("Window")
#--Buttons
b1=Button(fenster, text="Button")
b1.config(height = 5, width = 7)
b1.grid(row=0, column=0)
b2 = Button(text="disable", command=switch)
b2.grid(row=0,column=1)
fenster.mainloop()
funcao()
请你帮我一下好吗?问好

您在funcao函数中创建b1变量,因此它被创建为funcaolocal变量。局部变量只能从创建它们的函数访问。在第一个示例中,您创建了一个全局变量(不是在函数中),所以它可以从函数外部访问,也可以在任何函数内部访问。有许多解决方案,下面是其中之一:

例如:使用嵌套函数
from tkinter import *
def funcao():
def switch():
b1["state"] = DISABLED
fenster = Tk()
fenster.title("Window")
#--Buttons
b1=Button(fenster, text="Button")
b1.config(height = 5, width = 7)
b1.grid(row=0, column=0)
b2 = Button(text="disable", command=switch)
b2.grid(row=0,column=1)
fenster.mainloop()

可以工作,因为switch函数在内部funcao函数,这样您就可以访问funcao的局部变量。

希望有帮助。

最新更新