es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Aumentar el contador al pasar el tiempo del sistema.

A continuación se muestra mi intento de hacer que la variable contador se incremente a medida que pasa cada segundo. No está funcionando como pensé que lo haría. Creo que el problema está en el bucle while de intentar comparar el tiempo antiguo con el nuevo tiempo para medir si ha pasado un segundo.

import time as time
import tkinter as tk

root = tk.Tk()
root.geometry('200x200')

meses = {'1': 'Mes de las Flores',
         '2': 'Mes de la Luna',
         '3': 'Mes del Dragón'}

horas = {'1': '1ª hora',
         '2': '2ª hora',
         '3': '3ª hora'}

systemtime = tk.Label(root, text=f'{time.time()}')
systemcounter = tk.Label(root, text='0')
gametimemonth = tk.Label(root, text='Mes')
gametimehour = tk.Label(root, text='Hora')

systemtime.pack()
systemcounter.pack()
gametimemonth.pack()
gametimehour.pack()

def actualizar_todo_el_tiempo():
    systemtime['text'] = f'{time.time()}'
    gametimemonth['text'] = 'Mes'
    gametimehour['text'] = 'Hora'
    root.update()

systemtimerold = time.time()
contador = 0
while True:
    systemtimernew = time.time()
    if systemtimernew == systemtimerold + 1:
        contador = contador + 1
        systemcounter['text'] = 1
    actualizar_todo_el_tiempo()

root.mainloop()
Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el bucle while. Estás intentando comparar el tiempo antiguo con el nuevo tiempo para medir si ha pasado un segundo, pero esto no funcionará porque el tiempo está cambiando constantemente. En su lugar, deberías usar la función time.sleep() para pausar el bucle durante un segundo antes de incrementar el contador. Intenta cambiar el bucle while a lo siguiente:

    while True:
        time.sleep(1)
        counter = counter + 1
        system_counter['text'] = 1
        update_all_time()
    

Comments are closed.