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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.