Задать вопрос
@AleksAleksA
Начинающий

Как оуправлять циклом for?

Всем здравствуйте! Не могу понять как реализовать концепцию. Есть вложенный цикл for, перебирающий последовательность. Как в tkinter реализовать произвольную приостановку выполнения цикла по нажатию на кнопку, и потом возобновление этого цикла? Другими словами: нажал на кнопку - и выполняемый цикл встал на бесконечную паузу... следующее нажатие на кнопку - и цикл продолжил выполнение до конца... Буду благодарен примеру кода.
  • Вопрос задан
  • 39 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@dim5x
ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
import tkinter as tk


def generator_sequence(data):
    for i in data:
        yield i


def next_step():
    global paused, sequence, after_id

    if not paused:
        try:
            value = next(sequence)
            label.config(text=f"Текущее: {value}")
            after_id = root.after(1000, next_step)  # Планируем следующий шаг.
        except StopIteration:
            label.config(text="Завершено!")
            button.config(state=tk.DISABLED)


def toggle_pause():
    global paused, after_id

    paused = not paused
    button.config(text="Продолжить" if paused else "Пауза")

    if not paused:  # Если сняли паузу.
        if after_id:
            root.after_cancel(after_id)  # Отменяем предыдущий запланированный вызов.
        next_step()


# Инициализация
root = tk.Tk()
after_id = None
paused = True  # Начинаем в состоянии паузы.
data = ["A", "B", "C", "D", "E"]
sequence = generator_sequence(data)

label = tk.Label(root, text="Нажмите 'Старт'")
label.pack(pady=10)

button = tk.Button(root, text="Старт", command=toggle_pause)
button.pack()

root.mainloop()


Если никакой дополнительной логики не нужно и последовательность уже существует, то можно без generator_sequence просто: sequence = iter(data) .
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы