Python - 将局部变量更改为全局变量
Python - Change a local variable to a global
当我 运行 我的代码时,我得到一个 NameError,因为 "label" 没有定义。它是一个局部变量,但我希望它是一个全局变量。
from tkinter import *
from threading import Thread
def window():
root = Tk()
Window=Frame(root)
Window.pack(side=TOP)
label = Label(Window, text="Window").grid()
root.mainloop()
def loop():
label.configure(text="Something else")
if __name__ == '__main__':
Thread(target = window).start()
Thread(target = loop).start()
当我将 global label
添加到我的代码时,它给了我同样的错误。我是 python 新手。我做错了什么?
您需要在全局范围内声明您的变量。
请注意,当您使用多线程时,无法确定哪个线程会先 运行。你需要一个接一个控制到运行。在这段代码中,我通过 sleep()
函数延迟了第二个线程。
你可以这样做:
from tkinter import *
from threading import Thread
import time
global label #global variable label
def window():
root = Tk()
Window=Frame(root)
Window.pack(side=TOP)
global label #this line is needed if you want to make any change on label variable
label = Label(Window, text="Window") #updated
label.grid() #updated
root.mainloop()
def loop():
time.sleep(1) #wait for one second and give chance other thread to run first
global label
label.configure(text="Something else")
if __name__ == '__main__':
Thread(target = window).start()
Thread(target = loop).start()
当我 运行 我的代码时,我得到一个 NameError,因为 "label" 没有定义。它是一个局部变量,但我希望它是一个全局变量。
from tkinter import *
from threading import Thread
def window():
root = Tk()
Window=Frame(root)
Window.pack(side=TOP)
label = Label(Window, text="Window").grid()
root.mainloop()
def loop():
label.configure(text="Something else")
if __name__ == '__main__':
Thread(target = window).start()
Thread(target = loop).start()
当我将 global label
添加到我的代码时,它给了我同样的错误。我是 python 新手。我做错了什么?
您需要在全局范围内声明您的变量。
请注意,当您使用多线程时,无法确定哪个线程会先 运行。你需要一个接一个控制到运行。在这段代码中,我通过 sleep()
函数延迟了第二个线程。
你可以这样做:
from tkinter import *
from threading import Thread
import time
global label #global variable label
def window():
root = Tk()
Window=Frame(root)
Window.pack(side=TOP)
global label #this line is needed if you want to make any change on label variable
label = Label(Window, text="Window") #updated
label.grid() #updated
root.mainloop()
def loop():
time.sleep(1) #wait for one second and give chance other thread to run first
global label
label.configure(text="Something else")
if __name__ == '__main__':
Thread(target = window).start()
Thread(target = loop).start()