Python - изменить локальную переменную на глобальную - PullRequest
0 голосов
/ 10 июня 2018

Когда я запускаю свой код, я получаю NameError, потому что «метка» не определена.Это локальная переменная, но я хочу, чтобы она была глобальной.

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 в свой код, это выдает мне ту же ошибку.Я новичок на питоне.Что я делаю не так?

1 Ответ

0 голосов
/ 10 июня 2018

Вам необходимо объявить вашу переменную в глобальной области видимости.

Обратите внимание, что, когда вы используете многопоточность, тогда не ясно, какой поток будет запущен первым.Вы должны контролировать это, чтобы бежать один за другим.В этом коде я задержал второй поток с помощью функции 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...