Events
Events
Hallo Leute,
hat jemand ein ganz einfaches Beispiel wie man in der einem Objekt einen Event auslöst und damit ne Funktion in nem anderen Objekt aufruft. Ich brauch das um etwas asyncron zu verarbeiten.
Danke schonmal
alpha
hat jemand ein ganz einfaches Beispiel wie man in der einem Objekt einen Event auslöst und damit ne Funktion in nem anderen Objekt aufruft. Ich brauch das um etwas asyncron zu verarbeiten.
Danke schonmal
alpha
- Dookie
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi alpha,
ich weiss nicht ob das geht, da ich mit deiner Problembeschreibung nicht wirklich was anfangen kann. Liegt vielleicht daran, daß ich von VB null ahnung habe und daher mit deinem Terminus probleme habe. Eventuell könntes du etwas klarer beschreiben was du machen willst.
"Asyncrone" und "Event feuern" deuten wohl darauf hin, daß du mit Threads arbeiten willst und die miteinander kommunizieren lassen willst? Dann schau dir mal das Modul threading an.
Gruß
Dookie
ich weiss nicht ob das geht, da ich mit deiner Problembeschreibung nicht wirklich was anfangen kann. Liegt vielleicht daran, daß ich von VB null ahnung habe und daher mit deinem Terminus probleme habe. Eventuell könntes du etwas klarer beschreiben was du machen willst.
"Asyncrone" und "Event feuern" deuten wohl darauf hin, daß du mit Threads arbeiten willst und die miteinander kommunizieren lassen willst? Dann schau dir mal das Modul threading an.
Gruß
Dookie
Code: Alles auswählen
#!/usr/bin/env python
import this
Hallo Dookie,
also die Sache ist so:
Objekt A erzeugt eine Instanz von Objekt B. Dann ruft Objekt A eine Funktion von der neuen Instanz des Objekts B auf, soll dann aber nicht warten bis die Funktion abgearbeitet ist (die Funktion startet z.B. nen neuen Thread in dem das Ganze dann abgearbeitet wird) sondern läuft ganz normal weiter. Ist der Thread von Objekt B jetzt fertig soll er einen Event (oder nenn es Callback) machen um jetzt rückwärts wieder ne Funktion von Objekt A aufzurufen mit z.B. einem Berechnungsergebnis. Solche Ereignisgesteuerte Programmierung ist ja bei Windows ja gang und gebe. Die Objekte im Tkinter haben ja auch solche Callbacks, wenn z.B. ein Button gedrückt wird ruft der Button ja auch ne Funktion auf.
Tut mir leid wenn ich es zunächst etwas zu wirr beschrieben habe
Danke mal fürs lesen.
alpha
also die Sache ist so:
Objekt A erzeugt eine Instanz von Objekt B. Dann ruft Objekt A eine Funktion von der neuen Instanz des Objekts B auf, soll dann aber nicht warten bis die Funktion abgearbeitet ist (die Funktion startet z.B. nen neuen Thread in dem das Ganze dann abgearbeitet wird) sondern läuft ganz normal weiter. Ist der Thread von Objekt B jetzt fertig soll er einen Event (oder nenn es Callback) machen um jetzt rückwärts wieder ne Funktion von Objekt A aufzurufen mit z.B. einem Berechnungsergebnis. Solche Ereignisgesteuerte Programmierung ist ja bei Windows ja gang und gebe. Die Objekte im Tkinter haben ja auch solche Callbacks, wenn z.B. ein Button gedrückt wird ruft der Button ja auch ne Funktion auf.
Tut mir leid wenn ich es zunächst etwas zu wirr beschrieben habe

Danke mal fürs lesen.
alpha
- Dookie
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
So wie du es beschreibst kannst du es ja auch machen. Übergib dann beim Erzeugen von Objekt B einfach als Parameter das Objekt A das es erzeugt hat, dann kannst du von B eine Methode von A aufrufen, bzw. über threading einen Event mit dem Ergebnis an A senden.
Gruß
Dookie
Gruß
Dookie
Code: Alles auswählen
#!/usr/bin/env python
import this
geschafft
Hallo Dookie,
habs hinbekommen. Falls jemand sowas mal braucht hier der Code.
Gruß
alpha
Edit (Leonidas): Code in Python Tags gesetzt
habs hinbekommen. Falls jemand sowas mal braucht hier der Code.
Code: Alles auswählen
import thread
import time
class Main:
def __init__(self):
myrechner = Rechner()
myrechner.doit(self)
for i in range(5):
time.sleep(1)
print "Wait:" + str(i)
def solution(self, x):
print "Ergebnis ist: " + str(x)
class Rechner:
def __init__(self):
pass
def doit(self, obj):
thread.start_new_thread(self.__calc,(obj,))
def __calc(self, obj):
x = 5+5
time.sleep(3)
obj.solution(x)
if __name__ == '__main__':
main = Main()
Gruß
alpha
Edit (Leonidas): Code in Python Tags gesetzt
Alpha, wofür brauchtst du in Rechner eine __init__ wenn da nur pass drin ist? Vielleicht wird dich ja noch dieses Kapitel aus dem Python Cookbook interessieren.
Zuletzt geändert von Leonidas am Freitag 7. Januar 2005, 13:01, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
alpha hat geschrieben:Brauch ich hier garnichtDachte nur ich brauch vieleicht noch nen Konstruktor. Stört ja nicht weiter, oder?
Nein, stören tuts nicht, könnte vielleicht für die zukünftige Entwicklung nötig sein.
Jetzt noch ein kompakterer Code:
Code: Alles auswählen
import thread
import time
class Main:
def __init__(self):
self.doit()
for i in range(5):
time.sleep(1)
print "Wait:" + str(i)
def solution(self, x):
print "Ergebnis ist: " + str(x)
def doit(self):
thread.start_new_thread(self.__calc, ())
def __calc(self):
x = 5+5
time.sleep(3)
self.solution(x)
if __name__ == '__main__':
Main()
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Hallo Leonidas,
so geht es natürlich auch.
Ich wollte aber mal ausprobieren ob es in mehreren Klassen möglich ist. Hintergrund ist der, dass manchmal mehrere Leute an einem Projekt arbeiten und dann muß man sich natürlich die Arbeit aufteilen. Einer macht dann z.B. Datenbankzugriffe oder sowas und der Andere kümmert sich um was anderes. Um jetzt nicht immer eine Funktion aufzurufen um zu schauen ob sich was geändert hat ist es so jetzt möglich der anderen Klasse einen Event zukommen zu lassen.
Darum wollte ich das mal ausprobieren.
Gruß
alpha
so geht es natürlich auch.

Darum wollte ich das mal ausprobieren.
Gruß
alpha
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder