全局变量不适用于线程 - Python
Global Variable not working with Threads - Python
我希望能够在线程中更改 Tkinter 框架的背景颜色,该框架在单独的函数中声明。当我 运行 以下代码时,我收到以下错误。
错误:
NameError: name 'mainScreen' is not defined
代码:
import tkinter as tk
from tkinter import ttk
from multiprocessing import Process
def main():
global mainScreen
root = tk.Tk()
root.geometry('1040x540+50+50')
mainScreen = tk.Frame(root, width = 1040, height = 540)
mainScreen.place(x=0, y=0)
root.mainloop()
def test(): # This function is in a thread as it will be run as a loop.
while True:
mainScreen.configure(bg='red')
if __name__ == '__main__':
p2 = Process(target = test)
p2.start()
main()
感谢任何帮助。
您可以将整个代码替换为:
import tkinter as tk
def main():
global mainScreen
root = tk.Tk()
root.geometry('1040x540+50+50')
mainScreen = tk.Frame(root, width=1040, height=540)
mainScreen.place(x=0, y=0)
mainScreen.configure(bg='red')
root.mainloop()
if __name__ == '__main__':
main()
如果你想改变颜色,你可以这样做:
import time
import tkinter as tk
from threading import Thread
def test(mainScreen): # This function is in a thread as it will be run as a loop.
while True:
try:
time.sleep(1)
mainScreen.configure(bg='red')
time.sleep(1)
mainScreen.configure(bg='blue')
except RuntimeError:
break
if __name__ == '__main__':
root = tk.Tk()
root.geometry('1040x540+50+50')
mainScreen = tk.Frame(root, width=1040, height=540)
mainScreen.place(x=0, y=0)
p2 = Thread(target=test, args=(mainScreen,))
p2.start()
root.mainloop()
我希望能够在线程中更改 Tkinter 框架的背景颜色,该框架在单独的函数中声明。当我 运行 以下代码时,我收到以下错误。
错误:
NameError: name 'mainScreen' is not defined
代码:
import tkinter as tk
from tkinter import ttk
from multiprocessing import Process
def main():
global mainScreen
root = tk.Tk()
root.geometry('1040x540+50+50')
mainScreen = tk.Frame(root, width = 1040, height = 540)
mainScreen.place(x=0, y=0)
root.mainloop()
def test(): # This function is in a thread as it will be run as a loop.
while True:
mainScreen.configure(bg='red')
if __name__ == '__main__':
p2 = Process(target = test)
p2.start()
main()
感谢任何帮助。
您可以将整个代码替换为:
import tkinter as tk
def main():
global mainScreen
root = tk.Tk()
root.geometry('1040x540+50+50')
mainScreen = tk.Frame(root, width=1040, height=540)
mainScreen.place(x=0, y=0)
mainScreen.configure(bg='red')
root.mainloop()
if __name__ == '__main__':
main()
如果你想改变颜色,你可以这样做:
import time
import tkinter as tk
from threading import Thread
def test(mainScreen): # This function is in a thread as it will be run as a loop.
while True:
try:
time.sleep(1)
mainScreen.configure(bg='red')
time.sleep(1)
mainScreen.configure(bg='blue')
except RuntimeError:
break
if __name__ == '__main__':
root = tk.Tk()
root.geometry('1040x540+50+50')
mainScreen = tk.Frame(root, width=1040, height=540)
mainScreen.place(x=0, y=0)
p2 = Thread(target=test, args=(mainScreen,))
p2.start()
root.mainloop()