Seite 1 von 1

Zeitschleife

Verfasst: Donnerstag 26. Mai 2016, 21:31
von TengTeng
Moin moin,

ich bin gerade erst in Python eingestiegenund habe mich ein wenig in Tkinter eingearbeitet :D
Und habe nun folgendes Problem:

Ich möchte eine Schleife bauen die nacheinander Punkte ausgibt.
Wie bei oft auch bei Ladebildschirmen.
Nach dem in dem Textfeld die Meldung "Kalbfleisch wird geschnitten" kommt,
soll nun im Sekundentakt (ungefähr) ein weiterer Punkt erscheinen.
Also dann am Ende "Kalbfleisch wird geschnitten..."

Mein Problem ist aber das die Punkte erst angezeigt werden wenn die Schleife beendet ist.
Wenn man das gleich in der Konsole laufen läst, funktioniert das super, aber halt nicht mit dem Textfeld :(

Habt ihr eine Idee woran das liegt?

Code: Alles auswählen

def start():
   		 text_ausgabe.tag_config("r", foreground="red")
  		  if var.get() == 1:
     		 	text_ausgabe.insert("end", "Kalbfleisch wird geschnitten")
      			 x = 0
        		  while x < 4:
            			text_ausgabe.insert("end",".")
            			time.sleep(2)
            			x += 1
        
PS: Benutze Python 3.5.1 falls das was zur Sache tut....

Re: Zeitschleife

Verfasst: Donnerstag 26. Mai 2016, 22:44
von Dav1d
Die GUI hat eine interne Schleife die alles updated, diese Schleife kümmert sich auch um das Anzeigen deiner Punkte. Dein `time.sleep` pausiert die interne Schleife, deshalb wird dir nicht angezeigt (wie du evt gemerkt hast friert auch das Fenster auch ein).

Du kannst `w.after` benutzen um in X ms eine Funktion aufzurufen ohne die interne Schleife zu pausieren (ungetestet):

Code: Alles auswählen

def add_points(widget, n, delay, _current=0):
    widget.insert("end", ".")

    if _current < n:
        widget.after(delay, add_point, widget, n, delay, _current + 1)


def start():
    text_ausgabe.tag_config("r", foreground="red")

    if var.get() == 1:
        text_ausgabe.insert("end", "Kalbfleisch wird geschnitten")

        add_points(text_ausgabe, 4, 2000)
`add_points` fügt die Punkte hinzu und ruft sich n-mal selber mit einem delay auf um wieder einen Punkt hinzuzufügen, im Argument `_current` merkt sich die Funktion wie oft sie schon aufgerufen wurde.

Re: Zeitschleife

Verfasst: Freitag 27. Mai 2016, 06:30
von TengTeng
Vielen vielen Dank!
Funktioniert einwandfrei!