2015-05-31 5 views
0

Я изучаю Tkinter для python2, где я натолкнулся на этот код. Это создает окно в tkinter и увеличивает значение метки каждые 1 секунду. Пока код работает отлично. Можете сказать, почему бесконечный цикл не наблюдается, так как через каждые тысячи секунд управление возвращается к count(), и управление должно никогда не доходить до последней строки кода?Unexplained Infinite Loop в Tkinter

import Tkinter as tk 

counter = 0 
def counter_label(label): 
    def count(): 
    global counter 
    counter += 1 
    label.config(text=str(counter)) 
    label.after(1000, count) 
    count() 


root = tk.Tk() 
root.title("Counting Seconds") 
label = tk.Label(root, fg="green") 
label.pack() 
counter_label(label) 
button = tk.Button(root, text='Stop', width=25, command=root.destroy) 
button.pack() 
root.mainloop() 

Также переменная метка передается функции def counter_label просто копия оригинальной переменной, изменяя его shouldnot влияют на исходный variable.How это происходит?

Любая помощь приветствуется.

+0

отредактировал сообщение, чтобы включить второй вопрос. – freeza

+0

Решил мой второй вопрос .. Объект 'label' изменен. Я исправлю? – freeza

ответ

1
  1. 1000 измеряется в миллисекундах, т.е. он равен 1 секунде
  2. count() достигается, и это бесконечный цикл (если root.mainloop() работает).

label.after(1000, count) графики count функция и немедленно возвращается. Цикл событий tkinter должен быть запущен, иначе count() не будет вызываться снова.

+0

Спасибо, что было очень полезно. Из того, что я понял 'label.after()' метод doesnt содержит элемент управления для 1s, он просто планирует другую задачу и передает элемент управления. Правильно ли я? – freeza

+0

@freeza: да. Он возвращается сразу. – jfs