startrek1p2p Napisano Listopad 13, 2020 Udostępnij Napisano Listopad 13, 2020 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 More sharing options...
cyrial Listopad 13, 2020 Udostępnij Listopad 13, 2020 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. 1 Link do komentarza Share on other sites More sharing options...
startrek1p2p Listopad 13, 2020 Autor tematu Udostępnij Listopad 13, 2020 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 More sharing options...
Pomocna odpowiedź
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ę »