Skocz do zawartości

Program odliczający czas


startrek1p2p

Pomocna odpowiedź

Hej. 

Od kilku dni próbuje stworzyć program w pythonie (docelowo na RPI) który odlicza czas. Pojawia się tutaj problem ponieważ program jakby nie chce się aktualizować. Gdy dodaje przycisk to jedna sekunda się odlicza ale nic więcej. Ten pomysł odliczania czasu działa w terminalu ale już w aplikacji nie. Nie wiem gdzie tutaj jest problem, wiec proszę pomóżcie wskazać miejsce w którym jest błąd. dostałem poradę od jednego użytkownika aby korzystać z biblioteki Tkinter .
 

import tkinter as tk # ładowanie modułu tkinter
from time import *
sek = 2
min = 60 
dane = (min,sek)

def aktualizajca():
    text.set("twojczas to: %d minut %d sekund" % dane)
    

window = tk.Tk() # tworzenie okna głównego
window.title( "zegar" ) # ustawienie tytułu okna głównego
text = tk.StringVar()
label = tk.Label( window, textvariable = text, padx=100, pady=20)
label.pack() # podpinanie kontrolki pod okno
text.set("twojczas to: %d minut %d sekund" % dane)
sleep(1)
if (sek != 0 and min != 0 ):      
    if sek == 0:
        min -= 1
        sek = 60
    else:
        sek -= 1 
    dane = (min,sek)
else:
    text.set("koniec gry")
aktualizajca()
tk.mainloop()
#ok = tk.Button(window, text="OK", width=20, command=aktualizajca)
#ok.pack() # wywołanie pętli komunikatów

  

Link do komentarza
Share on other sites

Jeden z Twoich warunkow nie ma sensu. Sprawdzasz najpierw czy min i sek rozne od zera a nastepnie czy sek jest rowne zero, to sie nigdy nie wykonuje. Nie dzialalem nigdy z tk natomiast ewidentnie instrukcje wykonuja sie tylko raz, nie sa w zadnym loopie.

  • Lubię! 1
Link do komentarza
Share on other sites

Teoretycznie rozwiązałem swój problem, i wstawiam może komuś to pomoże 😄 

import tkinter as tk

class Timer:
    def __init__(self, parent):
       
        self.seconds = 0 # poczatek wartosci sekund
        self.minuts = 60  #początek wartosci minut 
        self.label = tk.Label(parent, text="60 min 0 s", font="Arial 30", width=10)# tekst podstawowy 
        self.label.pack()
        self.label.after(1000, self.refresh_label) # po upływie 1000ms włacz refresh_label

    def refresh_label(self):
        
        if self.seconds == 0:
            self.minuts -= 1
            self.seconds = 60
        else:
            # dekrementacja czasu
            self.seconds -= 1 

        dane=(self.minuts, self.seconds)
        # wyswietl nowy czas
        self.label.configure(text="%i min%i s" % dane)

        # po 1000ms wywołaj sie jeszcze raz 
        self.label.after(1000, self.refresh_label)

if __name__ == "__main__": #tego zapisu nie rozumiem ale dziala ;D 
    root = tk.Tk()
    root.title( "zegar" ) # ustawienie tytułu okna głównego
    timer = Timer(root)
    root.mainloop()

 

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...