Die Tastatur wird in das eingebettete Pygame verschoben

8

Ich habe mit dem Erstellen von Code gearbeitet, den ich in Zukunft verwenden kann, um ein Pygame-Fenster in ein TKinter-Fenster einzubetten, um tkinter-Menüs und -Tasten zu verwenden. Ich habe derzeit einige Probleme mit dem Umgang mit Tasten drücken. Ich möchte, dass alle Tastendrücke von pygame und nicht von tkinter behandelt werden, so dass tkinter key bindings ignoriert werden, wenn das pygame-Element als Vollbild angezeigt wird (was bedeutet, dass tkinter nicht verwendet wird).

Mein Problem ist, dass, wenn das Fenster zum ersten Mal geöffnet wird (oder nachdem es aus- und wieder angeklickt wurde), nur tkinter Tastaturbelegungen registriert. Sobald der Benutzer auf das Pygame-Fenster klickt, registriert nur Pygame Tastenbelegungen. Meine Frage ist, wie kann ich erkennen, ob tkinter oder pygame die Tastenbetätigungen erkennt und wie kann ich es so machen, dass pygame erkennt die Pressen statt tkinter, wenn ich es entdeckt habe?

Mein Code ist unten (Entschuldigung, es ist ziemlich lang)

%Vor%     
Owen683 05.09.2017, 11:17
quelle

1 Antwort

5

Wenn es keine direkte Lösung gibt (von der ich nicht weiß), könnten Sie einen Handler erstellen, der die in tkinter gefundenen Tastatureingaben an pygame weitergibt.

Die Idee besteht darin, die zu versendenden Schlüssel an eine dispatch_event_to_pygame -Funktion zu binden, die ein entsprechendes pygame.event.Event Objekt, und die letztere in Pygame-Ereignisschleife durch die pygame.event.post Funktion.

Zuerst definiere ich ein Wörterbuch, das die Entsprechung zwischen den Schlüsseln, die ich von tkinter nach pygame schicken möchte, und den entsprechenden Symbolen in pygame festlegt:

%Vor%

Dann definiere ich eine dispatch_event_to_pygame -Funktion, die ein tkinter-Ereignis annimmt, ein entsprechendes pygame-Ereignis erstellt und es veröffentlicht:

%Vor%

Schließlich binde ich alle Schlüssel, die ich an pygame senden möchte, an das Wurzel-Widget:

%Vor%

Referenzen für die Schlüsselnamen:

Right leg 05.09.2017, 11:37
quelle