Seite 1 von 1

command Befehl schritt für schritt ausführen

Verfasst: Freitag 26. November 2010, 19:26
von Sans
Hi,
ich arbeite mich gerade in tkinter rein, habe aber nun folgendes Problem:

Mit Druck auf den Button soll natürlich der in command angegebene Befehl ausgeführt werden. In der dafür vorgegebenen Definition verwende ich aber eine for i in range Schleife, die in jedem Schritt den eine Variable erhöht und über configure als Text in einem Label ausgibt. Nun möchte ich aber jeden einzelnen Schritt sehen. Momentan ist es so, dass das Programm die ganze Schleife ablaufen lässt, um dann das ENDERGEBNIS auszugeben. Ich möchte die Änderung aber "live miterleben".



Kann mir jemand helfen?

Code: Alles auswählen

import sys
import tkinter as TK
import math

def countup():
   for i in range(20000):
    global z  
    z=z+1
    counter.configure(text=str(z))      
   
#Fenster
fenster=TK.Tk()


#Buttons
count=TK.Button(fenster, text="Count", command= countup)
count.pack()

#Labels
z=0
counter=TK.Label(fenster, text="Press 'Count' to continue")
counter["bg"]="#ff0000"
counter.pack()

#loop
fenster.mainloop()
Danke
Sans

Re: command Befehl schritt für schritt ausführen

Verfasst: Freitag 26. November 2010, 20:25
von Xynon1
Du musst dad Frame-, Canvas- oder das Toplevel-Widget immer eine Aktualisierung erzwingen, wenn du in einem Schleifenkörper bist, da bei einer Schleife die Mainloop nicht aufgerufen wird.

Für diese Möglichkeit gibt es die Methoden "update" und "update_idletasks".

Re: command Befehl schritt für schritt ausführen

Verfasst: Freitag 26. November 2010, 23:22
von Sans
ok, aber wie baue ich das ein, als einfaches

Code: Alles auswählen

update_idletask()
funktionierts nicht, "the global name is not defined", mit TK davor wirds auchnicht besser.

Danke
Sans

Re: command Befehl schritt für schritt ausführen

Verfasst: Freitag 26. November 2010, 23:29
von BlackJack
Das sind Methoden auf `Tkinter`-Widgets.

Re: command Befehl schritt für schritt ausführen

Verfasst: Freitag 26. November 2010, 23:37
von Sans
Also was muss ich machen?

Re: command Befehl schritt für schritt ausführen

Verfasst: Freitag 26. November 2010, 23:39
von numerix
Wenn du mit den Begriffen "Widget" und "Methode" nichts anfangen kannst, solltest du dir mal etwas Zeit für Lektüre nehmen: http://infohost.nmt.edu/tcc/help/pubs/tkinter/

Re: command Befehl schritt für schritt ausführen

Verfasst: Samstag 27. November 2010, 00:09
von wuf
Hallo Sans

Hier etwas zum austesten:

Code: Alles auswählen

import sys
import tkinter as TK
import math

def countup():
   for i in range(20000):
    global z  
    z=z+1
    counter.configure(text=str(z))
    counter.update_idletasks()    
   
#Fenster
fenster=TK.Tk()


#Buttons
count=TK.Button(fenster, text="Count", command= countup)
count.pack()

#Labels
z=0
counter=TK.Label(fenster, text="Press 'Count' to continue")
counter["bg"]="#ff0000"
counter.pack()

#loop
fenster.mainloop()
Gruss wuf :wink:

Re: command Befehl schritt für schritt ausführen

Verfasst: Samstag 27. November 2010, 11:41
von Sans
Danke wuf, funktioniert.
numerix hat geschrieben:Wenn du mit den Begriffen "Widget" und "Methode" nichts anfangen kannst, solltest du dir mal etwas Zeit für Lektüre nehmen: http://infohost.nmt.edu/tcc/help/pubs/tkinter/
Ich weiß was Widgets und Methods sind, aber mit
Das sind Methoden auf `Tkinter`-Widgets.
kann ich nichts anfangen, jetzt bin ich schlauer^^

sans

Re: command Befehl schritt für schritt ausführen

Verfasst: Dienstag 30. November 2010, 13:09
von ts7343
Das sind Methoden auf `Tkinter`-Widgets.
hoert sich an, als wenn es eine Methode auf ein Widget ist,

hier eine gute Beschreibung aus dem NewMexicoTech Dokument:


25. Universal widget methods

The methods are defined below on all widgets. In the descriptions, w can be any widget of any type.

w.update()
This method forces the updating of the display. It should be used only if you know what you're doing,
since it can lead to unpredictable behavior or looping. It should never be called from an event callback
or a function that is called from an event callback.

w.update_idletasks()
Some tasks in updating the display, such as resizing and redrawing widgets,
are called idle tasks because they are usually deferred until the application has
finished handling events and has gone back to the main loop to wait for new events.