mal wieder Eventhandling

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Buell
User
Beiträge: 90
Registriert: Samstag 29. Oktober 2005, 14:17

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.
mitsuhiko
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
TUFKAB – the user formerly known as blackbird
Buell
User
Beiträge: 90
Registriert: Samstag 29. Oktober 2005, 14:17

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

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!
dev
User
Beiträge: 49
Registriert: Montag 23. Januar 2006, 09:52
Kontaktdaten:

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:

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)   
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. :roll:

Ciao,
dev
Buell
User
Beiträge: 90
Registriert: Samstag 29. Oktober 2005, 14:17

Habe zwar noch nie was von Louie gehört, aber das sieht zumindest erstmal sehr vielversprechend aus, werde das gleich mal ausprobieren.

Danke!
Buell
User
Beiträge: 90
Registriert: Samstag 29. Oktober 2005, 14:17

SUPER !!! Es Funktioniert!!!

Vielen Dank!!!
dev
User
Beiträge: 49
Registriert: Montag 23. Januar 2006, 09:52
Kontaktdaten:

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. :wink:
Antworten