Глобальный префикс не устанавливает переменную

#python-3.x #tkinter

#python-3.x #tkinter

Вопрос:

Я пытаюсь создать окно Tkinter, которое устанавливает переменную на что-то в зависимости от того, какую кнопку вы нажали. Из того, что я знаю, единственный способ сделать это — назначить «command» функции. но код, который использует переменную, отсутствует в этой функции, поэтому я пытаюсь использовать «глобальный», чтобы установить фактическую переменную, которую я хочу выбрать. Но по какой-то причине он по-прежнему возвращает 0, на который я изначально его установил. Вот мой код

         choi = 0
        def return1():
            global choi
            choi = '1'
            print(choi)
        def choicedone():
            choiwind.destroy()
        choiwind = tkinter.Tk()
        preset1_button = tkinter.Button(choiwind, text = 'button', command = return1)
        quit_button = tkinter.Button(choiwind, text = 'Done', command = choicedone)
        preset1_button.pack()
        quit_button.pack()
        choiwind.mainloop()
        print(choi)
        if choi == '1':
            #do stuff
        else:
            print('Error')
 

Он возвращает «1», затем «0», затем «Ошибка»

Ответ №1:

Похоже, что опубликованный код находится внутри функции, поэтому global choi не ссылается на choi переменную внутри этой функции.

Вам нужно изменить global choi на nonlocal choi .

Обратитесь к документу Python global nonlocal для получения подробной информации.