2016-08-06 6 views
-2

Это код, который я написал, чтобы понять, как работает глобальная переменная.Невозможно получить значение переменной из класса

Я не могу получить значение для aaa в print('fuera ' , aaa). Я не уверен, как происходит последовательность выполнения.

import tkinter as tk 
global aaa 

def primero(): 
    winda = tk.Toplevel() 
    def on_button(): 
     global aaa 
     aaa = entry.get() 
     winda.destroy() 

    entry = tk.Entry(winda) 
    button = tk.Button(winda, text="Get", command=on_button) 
    button.pack() 
    entry.insert(0,'nada') 
    entry.pack() 
    entry.focus_set() 

windo = tk.Tk() 
primero() 
print ('fuera ', aaa) 
windo.mainloop() 
+1

Вам не нужно глобальное ключевое слово для переменной, уже имеющейся в глобальной области ... Вторая строка –

+1

Вы не запустите e вентиляционный цикл до * после * вызова 'print()', так что вы еще не можете нажать кнопку. –

ответ

0

Я не знаю, как последовательность выполнения происходит

В принципе, вы начинаете окно с кнопкой первым. Достаточно просто. Между тем, код после инициализации окна, то есть оператор печати, продолжает выполняться, но aaa инициализируется только при нажатии кнопки.

Поэтому ошибка.

В более широкую картину, здесь, GUI события делает изучение глобальных переменных более сложной, чем это необходимо

Если вы хотите, чтобы решить эту проблему, просто инициализировать aaa

import tkinter as tk 
aaa = None 

Если вы 'd хотел бы посмотреть это изменение глобальной переменной, добавить еще один оператор печати внутри кнопки.

+0

Criket, спасибо. Я понимаю, что я могу напечатать aaa внутри кнопки. Мой вопрос в том, как я могу извлечь его из кнопки, если я хочу использовать aaa в других частях программы. Вот почему я добавляю печать после вызова метода primero. Я думал, что aaa придет от primero со значением, чтобы показать. thanks –

+0

Тогда вы должны определить функцию, которую вы передаете 'aaa' в качестве параметра. Ошибка, которую вы получаете, состоит в том, что 'aaa' не определен в точке оператора печати, но только после нажатия кнопки (если вы когда-либо делаете) –

+0

Criket. Благодарю. Разве это не функция on_button ??? почему я должен создать еще один. Как только я делаю on_button, глобальный aaa должен быть известен везде или нет? –

Смежные вопросы