Focus eines Frames verhindern

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Hallo!

ich bin dabei, eine Bildschirmtastatur mit wxGTK zu programmieren. Eigentlich gibt es momentan nur noch einen Stolperstein: das Fenster (``wx.Frame``) bekommt beim Reinklicken (in das Fenster, den darin befindlichen Panel oder einen der Buttons fuer die Tasten) den Focus. Dadurch werden die Tastendruecke im Keyboard-Fenster ausgefuehrt und nicht, wie beabsichtigt, im Fenster, dass zum Zeitpunkt des Klicks den Focus hat.

Ich habe bereits die ``AcceptsFocus``-Methode meines Frames, des Panels und der Buttons ueberschrieben und ``False`` zurueckgeben lassen. Jedoch bekommt das Fenster trotzdem immer den Focus, sobald ich reinklicke oder es mit Alt+Tab auswaehle.

Hat dazu vielleicht jemand eine Idee?

Ich freue mich auf eure Antworten und danke schon einmal im Voraus fuer die Bemuehungen der hier immer so zahlreich vorhandenen Helfer.

Viele Grueße,
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Gremlin
User
Beiträge: 166
Registriert: Freitag 28. Mai 2010, 23:49

Ich habe vorher nie versucht in die Fokus-Mechanik einzugreifen, aber falls du alle "naheliegenden" bzw. äh.. "vorgesehen" ( ;) ) Wege ausprobiert hast, könntest du es mal so versuchen, indem du das Fenster mit aktuellem Fokus vor der Anzeige deines eigenen registrierst und dann nachdem dein eigenes Fenster angezeigt wird, den Fokus wieder auf das andere überträgst.

Das hier brachte mich auf die Idee: http://www.michaelfogleman.com/2009/01/ ... hout-focu/

Da ließe sich doch bestimmt was mit ctypes oder pywin32 machen. :)

Edit: Nochmal etwas genauer gelesen und das "GTK" gesehen... Naja, vielleicht hilfts ja doch in die richtige Richtung. :oops:
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Hallo!

Danke fuer die Antwort.

Ja, ich suche etwas fuer GTK.

Es kann sein, dass ich schon einen Schritt weitergekommen bin. Mit ``gtk.Window.set_accepts_focus(False)`` kann ich einem GTK-Window verbieten, Focus anzunehmen. Mit ``wx.Frame.GetGtkWidget()`` bekomme ich ein long, den pointer auf das dem Frame zugrundeliegende GTK-Widget. Was mir jetzt noch fehlen wuerde ist eine Moeglichkeit, das Python-GTK-Widget zu diesem Pointer zu bekommen, damit ich auf dem dann ``set_accepts_focus`` aufrufen kann.

Hat dazu jemand eine Idee?

Viele Grueße,
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

So, ich habe mir jetzt anders abgeholfen - auch, wenn das ein ganzes Stueck Arbeit war.

Ich habe nun einfach das gesamte Fenster direkt mit pygtk programmiert. Es ist schon erstaunlich, welch weitreichende Moeglichkeiten man damit hat, tief in das Verhalten der Widgets einzugreifen. Aber da dieses Fenster sowieso nicht mehr tun soll, als das Keyboard anzuzeigen, brauche ich mir darueber ja nicht so viele Gedanken zu machen. :-)

Jedenfalls funktioniert nun soweit alles ganz gut.
Wenn das Projekt ein einigermaßen release-faehigen Zustand erreicht hat, werde ich das hier mal posten.

Bis dahin: vielen Dank fuer die Hilfe!

Viele Grueße,
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Antworten