3

Есть функция которая запускается кнопкой старт и сама себя бесконечно воспроизводит через root.after()

Нужно сделать кнопку stop, которая будет останавливать эту функцию, при этом не удаляя, чтобы можно было кнопкой старт ее снова запустить.

Как это реализовать?

Менять root.after() на обычный цикл который останавлиаается через break не нужно.

def a(event):
    def b():
        global x

        print x
        x += 1
        root.after(100, b)
    b()  
Twiss
  • 6,393
  • Добавьте, пожалуйста, в вопрос (через кнопку править) пример этой функции. Простой набросок без логики. А так, наверное, без какого-нибудь флага не обойтись. Типо if flag: root.after(), и откуда-то вы его меняете на False, и функция остановится – gil9red Apr 25 '18 at 11:16
  • while (not stop): и далее код – Эникейщик Apr 25 '18 at 11:35

1 Answers1

3

Вот пример подсчета значение каждую секунду при нажатии на кнопку. При нажатии на стоп вы замораживаете отсчет до тех пор пока не нажмете кнопку старт.
Как пример таймер обратного отсчета.

try:
    import Tkinter as tk # python 2.x
except ModuleNotFoundError:
    import tkinter as tk # python 3.x


class Main(tk.Tk):
    def __init__(self):
        super().__init__()
        self.second = 0
        self.label = tk.Label(text="Прошло времени: {} сек".format(self.second))
        self.label.pack()

        button_start = tk.Button(text="Нажать чтобы начать отсчет", command=self.start).pack()
        button_stop = tk.Button(text="Остановить отсчет", command=self.stop).pack()

    def start(self):
        self.second += 1
        self.label.config(text="Прошло времени: {} сек".format(self.second))
        self.time = self.after(1000, self.start)

    def stop(self):
        if self.time is not None:
            self.after_cancel(self.time)
            self.time = None


if __name__ == "__main__":
    main = Main()
    main.mainloop()

введите сюда описание изображения

Twiss
  • 6,393