Sich aktualisierende Labels

Fragen zu Tkinter.
Antworten
nevergod
User
Beiträge: 46
Registriert: Mittwoch 22. September 2010, 13:22

Guten tag liebe python gemeinde ;)

Ich programmiere gerade ein kleines spiel.
Nun würde ich gerne eine Statbox im mainfenster haben.
Dachte mir ich mache das einfach via Labels und .grid zu ner kleinen tabelle und die ganzen stats als variablen die dann in den labels angezeigt werden.
Damit die Variablen aktuell bleiben sollen die dateien wo die stats gespeichert sind permament neugeladen (oder alle 30 sekunden) werden (open, x = f, close etc etc etc)

Soweit so gut, nun sind labels aber soweit ich weiß nix dynamisches und ich müsste trotzdem alles neustarten damit es aktualisiert wird!

Gibt es sonst noch ne möglichkeit das zu regeln? (ohne das man alles neustarten muss...)?

mit freundlichen Grüßen,
NeverGod
BlackJack

@nevergod: Ich würde eine Funktion schreiben die per `after()`-Methode alle 30 Sekunden aufgerufen wird und die Labels mit den Werten aktualisiert.
nevergod
User
Beiträge: 46
Registriert: Mittwoch 22. September 2010, 13:22

bin leider noch ein neuling ^^ Wie würde das gehen? die after anweisung ist mir noch neu, entschuldigung.
BlackJack

@nevergod: `after()` ist keine Anweisung sondern eine Methode die es auf jedem `Tkinter`-Widget gibt. Der Methode gibst Du die Anzahl der Millisekunden und eine Funktion und (ungefähr) nach der angegebenen Anzahl von Millisekunden wird die Funktion dann von `Tkinter` aufgerufen.
nevergod
User
Beiträge: 46
Registriert: Mittwoch 22. September 2010, 13:22

Also das was ich aktualiusiert haben will in while rein und mit after(300) versehen ja?
Vielen dank das werde ich versuchen ^^
BlackJack

@nevergod: Nein, bloss kein ``while``. Nur `after()`. Die Funktion zum aktualisieren kann an ihrem Ende ja selbst wieder den "Auftrag" geben nach einer Zeit aufgerufen zu werden.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo nevergod

Hier ein kick off Versuch:

Code: Alles auswählen

import Tkinter as tk

UPDATE_TIME = 1000 # 1 Sek.

def update_label():
    """Aktualisiert das Label"""
    
    my_label.config(text=app_win.counter)
    app_win.counter += 1
    
    app_win.after(UPDATE_TIME, update_label)
    
app_win = tk.Tk()

app_win.counter = 0

my_label = tk.Label(app_win, relief='raised', width=10)
my_label.pack()

update_label()

app_win.mainloop()
Gruss wuf :wink:
Take it easy Mates!
nevergod
User
Beiträge: 46
Registriert: Mittwoch 22. September 2010, 13:22

ich glaube ich habe es verstanden :lol:

Vielen dank!

edit//

Code: Alles auswählen

  def namestat():
                x=open("bin/account/1.txt",'r')
                namestat=x.readline()
                x.close()
            namelabel1=Label(main,text="%s" % namestat)
            def update_label():
                x=open("bin/account/1.txt",'r')
                namestat=x.readline()
                x.close()
                namelabel1.config(text=namestat)
                def namestat():
                    x=open("bin/account/1.txt",'r')
                    namestat=x.readline()
                    x.close()
                
            namelabel1.after(1000,update_label)
habe das jetzt so gemacht aber wenn ich die 1.txt verändere updated sich mein label nicht. :S

edit// hab den fehler gefunden ^^ das updaten selber war nicht in der definition, nun klappt alles wunderbar!! DANKE!
Antworten