Проблема в том, что даже если вы звоните print_sleep
с True
, чтобы остановить цикл, уже есть ожидающая работа, ожидающая запуска.Нажатие кнопки «Стоп» не вызовет запуска нового задания, но старое задание все еще там, и когда оно вызывает само себя, оно переходит в False, что приводит к продолжению цикла.
Вам необходимо отменить ожидающее выполнениеработа, чтобы она не запускалась.Например:
def cancel():
if self._job is not None:
root.after_cancel(self._job)
self._job = None
def goodbye_world():
print "Stopping Feed"
cancel()
button.configure(text = "Start Feed", command=hello_world)
def hello_world():
print "Starting Feed"
button.configure(text = "Stop Feed", command=goodbye_world)
print_sleep()
def print_sleep():
foo = random.randint(4000,7500)
print "Sleeping", foo
self._job = root.after(foo,print_sleep)
Примечание: убедитесь, что вы инициализируете self._job
где-нибудь, например, в конструкторе вашего объекта приложения.