mehrere usb-Tastaturen in einer Anwendung

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
Gast

Samstag 21. Januar 2006, 18:25

Guten Abend,

ich hoffe, dass ich hier in der richtigen Rubrik bin.
Ich habe eine Eingabemaske in Tkinter mit mehreren Eingabefeldern (Entry). Jedem dieser Eingabefelder (insgesamt acht) soll eine bestimmte usb-Zahlenblocktastatur eindeutig zugewiesen werden. Die normale Standardtastatur existiert zusätzlich und ist von dieser Auswahlregel nicht betroffen.
Weiß jemand, wie ich dieses bewerkstelligen könnte?

Dank im Voraus,
Dada
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Samstag 21. Januar 2006, 18:31

Das ist extrem betriebssystemabhängig, denn im Endeffekt kommt es auf das Betriebssystem (den Tastaturtreiber) an wie die Zahlenblocktastatur Deinem Programm vorkommt. Zum Beispiel, wenn Dein Programm vom Betriebssystem/Windowingsystem "<KeyPress-1>" als Event für jedes Drücken einer 1 (egal auf welcher Tastatur) bekommt, hast Du keine Chance das ganze zu unterscheiden, außer durch irgendwelchen Low-Level-Code, der dann aber eben auf das Windowingsystem und das BS ankommt.

Das einfachste wäre im Prinzip die Tastaturen auf unterschiedliche Bereiche zu legen, also zum Beispiel "<KeyPress-1>" für die erste Tastatur, "<Ctrl-KeyPress-1>" für die zweite, usw. Wenn Du dann auch noch einen kleinen Teil der Zeichen mit reinnimmst (du kannst schließlich jede Taste auf acht verschiedene Arten drücken mit den drei Modifiern Ctrl, Alt, Shift) hast Du jede Tastatur separat gemappt.

Ganz davon abgesehen: für Tkinter gibts ein separates Forum, steht ein bißchen unter Allgemeine Fragen.

--- Heiko.
Gast

Samstag 21. Januar 2006, 18:48

Ich habe meine Frage nicht im Tkinterforum gestellt, da mir mein Problem zu weit weg von der grafischen Oberfläche Tkinter schien. Aber vielleicht kann ein Administrator mein Thema dahin verschieben, so es dort besser aufgehoben ist.
An den Ziffernblocktastaturen sitzt jeweils ein Wettkampfrichter. Daher habe ich dummerweise acht Tastaturen - für mich alleine hätte auch eine gereicht, mit den Klimmzügen wie Alt, Strg ...
Mein System läuft unter Suse 9.1 (bzw. ich warte auf 10.1) und ich arbeite mit der Gnomeoberfläche.
Ich habe die Hoffnung, dass ich die einzelnen Tastaturen wie ein Gerät ansprechen könnte; jedoch habe ich keine Ahnung wie.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Samstag 21. Januar 2006, 18:54

Dann schreib bitte, unter welchem BS das laufen soll. Dann wird dir evtl. jemand helfen können.
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Samstag 21. Januar 2006, 19:06

Guck mal hier nach, libusb dürfte Dir helfen die Geräte als richtige devices anzusprechen, Du mußt dann aber den gesamten Eingabecode selbst machen und zuschauen wie Du die Geräte entsprechend pollst:

http://cvs.sf.net/viewcvs.py/bitpim/bitpim/native/usb/

Das ist das neueste Binding an libusb was ich finden konnte; es gibt aber meines wissens nach noch andere. Such mal in Google.

--- Heiko.
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Samstag 21. Januar 2006, 19:07

Eine Idee das ganze zu pollen wäre neben dem GUI-Thread einen zweiten zu machen (ich nenn ihn mal Input-Thread), der entsprechend regelmäßig guckt ob von den devices ein Event kommt, und das dann an den GUI-Thread zum Beispiel mittels einer Queue weiterleitet. Der GUI-Thread muss dann entsprechend der Nachrichten aus dem Input-Thread Events an die Eingabefelder erzeugen. Das geht, ist denke ich auch praktikabel umzusetzen.

--- Heiko.
Gast

Samstag 21. Januar 2006, 20:29

So ähnlich habe ich mir es auch vorgestellt (in weiteren Prozessen die usb-Tastaturen abfragen und an den Tkinter-Prozess weiterleiten). Nur das Abfragen und Weiterleiten ist für mich völliges Neuland, und nach einem halben Tag ergebnislosen googlens habe ich mir gedacht, ich stelle die Frage im Forum. Prinzipiell scheint es ja zu gehen, und ich werde mal gucken, wie ich mit dem usb-Modul weiterkomme.
Eine Bitte noch um einen Tip, bevor ich wieder (end)los suche:
Wie soll ich "mittels einer Queue weiterleite"n?

Vielen Dank im Voraus
Dada
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Samstag 21. Januar 2006, 20:32

Guck Dir mal:

http://aspn.activestate.com/ASPN/Cookbo ... cipe/82965

an. Da ist Kommunikation zwischen einem Reactor-Thread und einem GUI-Thread gezeigt.

--- Heiko.
Antworten