Kann ich durch ein Tkinter Event beispielsweise Enter drücken ,
In einer While schleife die sich in einer Funktion befindet "break" auslösen?
Gruß Rootmentor
______________edit_____________
Ich werde mein Problem mit Multithreading lösen
GELÖST
Schleife unterbrechen EVENT
-
- User
- Beiträge: 54
- Registriert: Sonntag 17. August 2008, 18:26
- Wohnort: Lingen
- Kontaktdaten:
_____________________________________________
Die unendlichkeit dauert lang , besonders bis zum Ende
Die unendlichkeit dauert lang , besonders bis zum Ende
Ich glaube nicht, daß das guter Code wird. Verändere durch das Enter-Drücken lieber eine Variable und laß' das Programm auf diese Veränderung reagieren.Kann ich durch ein Tkinter Event beispielsweise Enter drücken, in einer While-Schleife die sich in einer Funktion befindet "break" auslösen?
Gruß
Wobei - und das betrifft nicht nur deinen Vorschlag, dem ich grundsätzlich zustimmen würde - das ganze ohne weiteres ja nicht funktioniert, weil das Programm in der Schleife auf das Event gar nicht reagiert. Es sei denn man ruft in der Schleife update() auf ...abgdf hat geschrieben:Ich glaube nicht, daß das guter Code wird. Verändere durch das Enter-Drücken lieber eine Variable und laß' das Programm auf diese Veränderung reagieren.Kann ich durch ein Tkinter Event beispielsweise Enter drücken, in einer While-Schleife die sich in einer Funktion befindet "break" auslösen?
Code: Alles auswählen
import tkinter as tk
from random import random
class Test(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.bind("<Return>", self.start)
self.bind("<Escape>", self.stop)
self.loop = True
self.mainloop()
def start(self, e):
print("Start")
while self.loop:
a = random()
self.update() # ohne das geht es nicht!
def stop(self, e):
print("Stop")
self.loop = False
Test()
Hallo numerix
Ich habe in der Tkinter-Referenz von John W.Shipman (NMT) näheres über die Tkinterr 'update'-Methode gelsen. Er schreibt folgendes:
Ich weiss nicht ob das was er sagt auch wirklich bei jedem Betriebsystem zutrifft. Also dein Vorschlag funktioniert bei mir einwandfrei.
Ich habe hier noch ein Snippet zusammengestellt, welches nur die von 'yipyip' erwähnte Tkinter 'after()' Methode verwendet:
Gruss wuf 
Ich habe in der Tkinter-Referenz von John W.Shipman (NMT) näheres über die Tkinterr 'update'-Methode gelsen. Er schreibt folgendes:
Code: Alles auswählen
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.
Ich habe hier noch ein Snippet zusammengestellt, welches nur die von 'yipyip' erwähnte Tkinter 'after()' Methode verwendet:
Code: Alles auswählen
# Python 3.0
import tkinter as tk
from random import random
class Test(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.bind("<Return>", self.start)
self.bind("<Escape>", self.stop)
self.after_object = None
self.mainloop()
def start(self, e):
print("Start")
self.after_loop()
def stop(self, e):
print("Stop")
self.after_cancel(self.after_object)
def after_loop(self):
value = random()
print(value)
self.after_object = self.after(500, self.after_loop)
Test()

Take it easy Mates!
@wuf: Danke für deine wertvolle Ergänzung. Mein Beitrag sollte auch nicht zeigen, wie man es machen *sollte*, aber so hätte man das verstehen können. Inwieweit Shipman hier recht hat, weiß ich nicht. Auf jeden Fall ist der Weg über die after()-Methode auch aus meiner Sicht der zu bevorzugende.
Gegenüber der Schleifenvariante mit update() muss man gedanklich eben ein bisschen anders herangehen und am Anfang ist das schon gewöhnungsbedürftig.
Gegenüber der Schleifenvariante mit update() muss man gedanklich eben ein bisschen anders herangehen und am Anfang ist das schon gewöhnungsbedürftig.