有一个程序每秒打印一次包含 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()

1 个回答