Python Черепаха Таймер Errati c Поведение - PullRequest
0 голосов
/ 24 марта 2020

Если щелкнуть экран во время печати чисел в следующей программе, время печати станет ошибочным c. Я пытаюсь понять, почему.

Мне удалось решить проблему с помощью timer_id = screen.getcanvas().after(1000, __continue_printing) и after_cancel, но в моем проекте сохраняется то же поведение из первого примера, несмотря на использование after() подход.

Если я могу понять, почему первый пример ведет себя так, как он, я верю, что это поможет мне решить мою проблему.

Может кто-нибудь объяснить, пожалуйста, время ошибки c? Есть ли как-то несколько таймеров, которые могут быть sh друг с другом, может быть?

import turtle

def get_nums():
    global nums, nums_iter
    nums = list(range(11))
    nums_iter = iter(nums)


def start_printing():
    global printing
    printing = True
    __continue_printing()


def stop_printing():
    global timer_id
    global printing
    printing = False


def __continue_printing():
    global printing, timer_id
    if printing:
        try:
            next_num = next(nums_iter)
            print(next_num)
            turtle.ontimer(__continue_printing, 1000)
        except StopIteration:
            printing = False

def click(x, y):
    stop_printing()
    get_nums()
    start_printing()

screen = turtle.Screen()
screen.setup(500, 500, 500, 500)
screen.listen()
screen.onclick(click)
get_nums()
start_printing()
turtle.done()
...