Hallo zusammen,
vor längerer Zeit habe ich schon mal hier eine ähnliche Frage gestellt, doch leider konnte si damals nicht gelöst werden.
Also:
Man stelle sich vor man hat 3 Dateien/Module zB a.py, b.py und c.py. a.py importiert b.py und benutzt alle in b.py vorhanden Klassen. b.py wiederrum importiert c.py dynamisch und benutzt alle darin vorhanden Klassen und übergibt self beim 1. Aufruf. Durch das übergebene self kann c.py eine Methode/Funktion zb OnC() in b.py auslösen. b.py wiederrum hat keine "Rückkopplung" zu a.py. a.py soll aber mitbekommen wenn diese Methode OnC() in b.py ausgelöst wird. Der logische Gedanke ist natürlich in der Methode OnC() ein Event auszulösen auf das a.py dann reagiert. Innerhalb einer Datei ist das auch kein Problem und man kann auch über mehrere Klassen zB win32event verwenden, da global definiert. Funktioniert leider nicht über mehrere Dateien - was mich etwas wundert weil is ja Windows Event. Erschwerend kommt noch hinzu, dass a.py b.py eigentlich nicht importiert, sondern b.py eine selbst geschriebene COM-Schnittstelle ist die in a.py per dispatch() eingebunden wird. Macht aber eigentlich keinen großen Unterschied.
Das einzige was ich bis jetzt Event-ähnlich hinbekommen habe ist, dass ich das SendKeys Modul verwendet habe und bei Auslösen der obigen Methode einen Tastendruck "F13" simuliere und in a.py dann ein Event OnKeyDown benutze.
Super wäre eine Lösung in der man mit dem Event noch eine Art Signatur senden kann - muss aber nicht.
Wäre super wenn da jemand Ahnung hätte und mir weiter hilft.
mal wieder Eventhandling
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Ich geb zu ich hab deinen Post nicht durchgelesen. Dazu war er zu schlecht formattiert was das Lesen start erschwert hat.
Aber vielleicht hab ich ja Glück und du suchst sowas: http://www.python-forum.de/post-31764.html#31764
Aber vielleicht hab ich ja Glück und du suchst sowas: http://www.python-forum.de/post-31764.html#31764
TUFKAB – the user formerly known as blackbird
Tut mir leid wenn das Format nicht schön genug ist aber hab mir Mühe gegeben.
Ja, das ist ein schönes Beispiel, wird aber in meinem Fall denke ich mal wieder nicht funktionieren, da der EventManager ja in der COM Schnittstelle laufen müsste und da wird es mit einem so einfachen Aufruf wie
eher schwierig. Obwohl, vielleicht würde es funktionieren, wenn ich das dispatch schon mal global mache - aber eher unwahrscheinlich.
Trotzdem Danke!
Ja, das ist ein schönes Beispiel, wird aber in meinem Fall denke ich mal wieder nicht funktionieren, da der EventManager ja in der COM Schnittstelle laufen müsste und da wird es mit einem so einfachen Aufruf wie
Code: Alles auswählen
class TestEvent(Event):
eher schwierig. Obwohl, vielleicht würde es funktionieren, wenn ich das dispatch schon mal global mache - aber eher unwahrscheinlich.
Trotzdem Danke!
auch ich bin nicht ganz sicher, ob das hier nicht die Antwort auf eine andere Frage ist.
Aber nehmen wir die Korrektheit der Annahme mal an, dann wäre vielleicht Louie eine Möglichkeit:
Addendum: da ich inzwischen Dein Folgeposting gelesen habe und ich von Python unter Windows keine Ahnung habe ist das dann vielleicht doch die Antwort auf eine andere Frage.
Ciao,
dev
Aber nehmen wir die Korrektheit der Annahme mal an, dann wäre vielleicht Louie eine Möglichkeit:
Code: Alles auswählen
import louie
class A:
def __init__(self):
louie.connect( self.receiver, 'mein.kleines.signal', louie.Any)
def receiver(self,message):
print message
class C:
def __init__(self):
self.message="rosebud"
def sender(self):
louie.send('mein.kleines.signal', None, message=self.message)
Ciao,
dev
Louie ist eine 'Weiterentwicklung' von PyDispatcher und kommt, soweit ich das bislang beurteilen kan,n ganz gut mit Twisted zurecht.
Bin gespannt, was bei Deinen Tests rauskommt.
Ciao,
dev
[edit] blöde Asynchronität - zwei Leute arbeiten gleichzeitig an einem Thread.
Bin gespannt, was bei Deinen Tests rauskommt.
Ciao,
dev
[edit] blöde Asynchronität - zwei Leute arbeiten gleichzeitig an einem Thread.