Как добавить сюда время в приложение?

Рейтинг: 1Ответов: 2Опубликовано: 22.01.2023

У меня есть программа, она можно сказать проверяет твою концентрацию внимания.
Суть ее заключается в том, что нужно нажимать на кнопку только когда число на экране меньше 5, b - кол-во правильных ответов, то есть если число на экране менше 5 и кнопка нажата, то к b прибавляется один.
Если же число равно 5 и кнопка нажата, то кол-во правильных ответов - b остается тем же.
В конце выводится процент правильных ответов.

Но теперь мне нужно сюда прицепить время. Я хочу, чтобы каждые 2 секунды функция происходила, и если кнопка не нажата, и время прошло, то кол-во правильных ответов-b остается тем же.

Есть предложения как это сделать?

from tkinter import *
from tkinter import ttk

root = Tk()     
root.title("Тест на концентрацию внимания")    
root.geometry("700x350")

numbers = [1,3,5,5,2,3,5,5,1,3,3,1,5,4,5,1,5,2,2,5,6]

current_index = -1

b= -1

def press():
    global b
    global current_index
    current_index += 1
    if numbers[current_index]<5 :
        b+=1
        print(b)
        label.config(text=numbers[current_index])
    elif numbers[current_index]==5:
        b=b
        print(b)
        label.config(text=numbers[current_index])
    elif numbers[current_index]==6:
        c=b/20*100
        label.config(text=int(c))

btn = ttk.Button(text="Кнопка", width=20, command = press)
btn.pack()

label=Label(text="Нажмите, чтобы начать", font=('Times 70'), width=60, height=50)
label.pack()

root.mainloop()

Ответы

▲ 0

Возможный вариант выглядит примерно так:

from tkinter import *
from tkinter import ttk

root = Tk()     
root.title("Тест на концентрацию внимания")    
root.geometry("800x350")

numbers = [
    1, 3, 5, 5, 2, 3, 5, 5, 1, 3,
    3, 1, 5, 4, 5, 1, 5, 2, 2, 5, 
    6
]

current_index = 0               # -1
b = 0                           # -1

# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
i = 0                                                    
labelText = StringVar()                         
lbl = Label(root, textvariable=labelText)        
lbl.pack()                                       

def updateDepositLabel(txt=""):
    global i 
    if i == 777:
        return
    text = f"Прошло {i} сек."
    labelText.set(text)
    i += 1
    root.after(1000, lambda: updateDepositLabel(txt=text))    

def press():
    global b, i 
    global current_index
    
    if current_index == 0:                                        # +++
        i = 0 
        root.after(1000, lambda: updateDepositLabel(txt=f""))

    if numbers[current_index] < 5 and i < 3 :                     # + and i < 3
        b += 1
    elif numbers[current_index] == 5:
        pass

    label.config(text=numbers[current_index])
    current_index += 1 
    i = 0    
        
    if numbers[current_index-1] == 6:
        c = b / 20 * 100
        label.config(text=f'{int(c)} <---- ФИНИШ')
        current_index = 0
        i = 777
        b = 0
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

btn = ttk.Button(text="Кнопка", width=20, command=press)
btn.pack()

label=Label(text="Нажмите, чтобы начать", font=('Times 50'), 
    width=60, height=50)
label.pack()

root.mainloop()

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

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

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

▲ -1

Импортируй модуль time и примени функцию sleep() для ожидания 2 секунды между каждой функцией:

import time

def press():
    global b
    global current_index
    current_index += 1
    if numbers[current_index]<5 :
        b+=1
        print(b)
        label.config(text=numbers[current_index])
    elif numbers[current_index]==5:
        b=b
        print(b)
        label.config(text=numbers[current_index])
    elif numbers[current_index]==6:
        c=b/20*100
        label.config(text=int(c))
    time.sleep(2)