Вывод данных в графический интерфейc tkinker Python
Есть программа, которая выводит на печать раз в секунду список из 30 значений (имитация значений с датчиков). Для нее написан небольшой графический интерфейс на tkinker. При запуске программы открывается окно, при нажатии на кнопку Старт, в окно для текста раз в секунду печатается строка. Подскажите, пожалуйста, как реализовать кнопку Стоп, останавливающую печать. При этом весь напечатанный текст должен остаться в окне и при нажатии на кнопку Пуск печать должна продолжиться.
from tkinter import scrolledtext
from utils import register_to_list
from time import sleep
import random
from datetime import datetime
from constants import CHOICES
registers_list = []
flag = True
def print_reg_values(registers_list, txt, window):
"""Пока значение flag истинно, каждую секунду выводит на печать
данные с датчиков и записывает эти данные в список.
Возвращает список из списков, содержащих данные с датчиков на каждую секунду
"""
global flag
while flag:
numbers = []
for i in range(15):
numbers.append(random.choice(CHOICES))
values = register_to_list(numbers)
txt.insert(1.0, f'{datetime.now().strftime("%H:%M:%S")} {values}\n')
window.update()
registers_list.append((datetime.now().strftime("%H:%M:%S"), values))
sleep(1)
window = Tk()
window.title("Добро пожаловать в приложение PythonRu")
window.geometry('1200x800')
start = Button(window, text="Старт", width=13, height=2, command=lambda: print_reg_values(registers_list, txt, window))
start.grid(column=0, row=0)
stop = Button(window, text="Стоп", width=13, height=2)
stop.grid(column=0, row=1)
txt = scrolledtext.ScrolledText(window, width=160, height=10)
txt.grid(column=1, row=2)
window.mainloop()
Источник: Stack Overflow на русском