2009-07-30 6 views
1

Ich vor kurzem diese Frage in der Pyglet-Benutzergruppe gestellt, aber bekam Antwort, also versuche ich hier statt.Erstellen eines neuen Eingabe-Ereignis-Dispatcher in Pyglet (Infrarot-Eingang)

Ich möchte Pyglet erweitern, um ein von lirc unterstütztes Infrarot-Eingabegerät verwenden zu können. Ich habe pyLirc vorher (http://pylirc.mccabe.nu/) mit PyGame benutzt und ich möchte meine Anwendung neu schreiben, um stattdessen Pyglet zu verwenden.

Um zu sehen, ob eine Schaltfläche gedrückt wurde, würden Sie in der Regel pyLirc abfragen, um festzustellen, ob in der Warteschlange Schaltflächen vorhanden sind.

Meine Frage ist, was ist der richtige Weg in Pyglet zu integrieren PyLirc?

Ich würde es vorziehen, wenn es in der gleichen wie die aktuellen Fenster Tastatur/Maus Ereignisse funktioniert, aber ich bin mir nicht sicher, wo ich anfangen soll.

Ich weiß, dass ich einen neuen Eventdispatcher schaffen kann, in dem ich die neuen Arten von Veranstaltungen anmelden kann und versenden sie nach dem Abruf, etwa so:

class pyLircDispatcher(pyglet.event.EventDispatcher): 
    def poll(self): 
     codes = pylirc.nextcode() 
     if codes is not None: 
      for code in codes: 
       self.dispatch_event('on_irbutton', code) 

    def on_irbutton(self, code): 
     pass 

Aber wie kann ich integrieren, dass in die Anwendung Haupt Schleife, um poll() weiterhin aufzurufen, wenn ich pyglet.app.run() benutze und wie füge ich diesen eventdispatcher an mein Fenster an, so dass es genauso funktioniert wie die Maus- und Tastatur-Dispatcher?

Ich sehe, dass ich einen Scheduler einrichten kann, um poll() in regelmäßigen Abständen mit pyglet.clock.schedule_interval aufzurufen, aber ist das der richtige Weg?

Antwort

1

Es ist wahrscheinlich zu spät für das OP, aber ich werde trotzdem antworten, falls es für andere hilfreich ist.

Das Erstellen des Ereignisverteilers und das Verwenden von pyglet.clock.schedule_interval, um poll() in regelmäßigen Abständen aufzurufen, ist ein guter Weg, dies zu tun.

den Event-Dispatcher zu Ihrem Fenster zu befestigen, müssen Sie eine Instanz des Dispatcher erstellen und seine push_handlers Methode dann rufen:

dispatcher.push_handlers(window) 

Dann können Sie die Ereignisse genau wie alle anderen Ereignisse in die Behandlung kommen Fenster.

1

Der richtige Weg ist, was auch immer funktioniert. Sie können es jederzeit später ändern, wenn Sie einen besseren Weg finden.

Verwandte Themen