全局变量不适用于线程-Python

全局变量不适用于线程-Python,python,multithreading,tkinter,global-variables,Python,Multithreading,Tkinter,Global Variables,我希望能够改变线程中Tkinter帧的背景颜色,该帧在单独的函数中声明。运行以下代码时,我收到以下错误 错误: name错误:未定义名称“主屏幕” 代码: 非常感谢您的帮助。您可以用以下代码替换整个代码: 将tkinter作为tk导入 def main(): 全局主屏幕 root=tk.tk() 根几何体('1040x540+50+50') 主屏幕=传统框架(根,宽度=1040,高度=540) 主屏幕位置(x=0,y=0) 主屏幕。配置(bg='red') root.mainloop() 如果u

我希望能够改变线程中Tkinter帧的背景颜色,该帧在单独的函数中声明。运行以下代码时,我收到以下错误

错误:
name错误:未定义名称“主屏幕”

代码:


非常感谢您的帮助。

您可以用以下代码替换整个代码:

将tkinter作为tk导入
def main():
全局主屏幕
root=tk.tk()
根几何体('1040x540+50+50')
主屏幕=传统框架(根,宽度=1040,高度=540)
主屏幕位置(x=0,y=0)
主屏幕。配置(bg='red')
root.mainloop()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
如果你想改变颜色,你可以这样做:

导入时间
将tkinter作为tk导入
从线程导入线程
def测试(主屏幕):#此函数位于线程中,因为它将作为循环运行。
尽管如此:
尝试:
时间。睡眠(1)
主屏幕。配置(bg='red')
时间。睡眠(1)
主屏幕。配置(bg='blue')
除运行时错误外:
打破
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
root=tk.tk()
根几何体('1040x540+50+50')
主屏幕=传统框架(根,宽度=1040,高度=540)
主屏幕位置(x=0,y=0)
p2=线程(目标=测试,参数=(主屏幕,)
p2.start()
root.mainloop()

我知道,但我正在做一个循环来更改背景的颜色。@ultimateduc编辑了答案以便您也可以使用while循环,但它不起作用,因为我无法在测试函数中指定颜色。@ultimateduc修复了在创建屏幕之前启动线程的问题。在启动线程之前,您是否尝试过创建屏幕?如果您所做的只是更改小部件的颜色,那么根本不需要线程。
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()