Kontrolle über die Tastatur-Navigation

Plattformunabhängige GUIs mit wxWidgets.
Antworten
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

Hallo Zusammen ...

Kaum fängt das Jahr an, schon kommen die ersten Probleme ...

Ich schreibe gerade an einer kleinen Anwendung mit wxPython (zur Übung ...).
Die GUI besteht aus (jeweils mehreren):
  • wx.Button
  • wx.StaticText
  • wx.ListCtrl
Diese sind auf drei wx.Panel verteilt. Die wx.Panel sind in einem weiteren wx.Panel, welches auf einem wx.Frame liegt, zusammengefasst.

Mein Problem dabei:

Ich möchte mit der TAB-Taste nur zwischen den wx.ListCtrl wechseln können.
(Für die wx.Button-Elemente nutze ich eine wx.AcceleratorTable ...)

Wie mache ich das ?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

midan23 hat geschrieben:Ich möchte mit der TAB-Taste nur zwischen den wx.ListCtrl wechseln können.
Hallo midan23!

Du kannst mit ``MoveAfterInTabOrder`` und ``MoveBeforeInTabOrder`` die Tab-Reihenfolge festlegen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

gerold hat geschrieben:Du kannst mit ``MoveAfterInTabOrder`` und ``MoveBeforeInTabOrder`` die Tab-Reihenfolge festlegen.
Hilft mir nicht wirklich ... oder kann man die wx.Button-Elemente damit aus der Tab-Reihenfolge rausnehmen ?

---------

Alternativ:

Kann man diese "Tabulator-Navigation" komplett abschalten ?
Dann müsste ich mit der wx.AcceleratorTable die Tab-Taste abfangen und den Focus entsprechend zuweisen ...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

midan23 hat geschrieben:
gerold hat geschrieben:Du kannst mit ``MoveAfterInTabOrder`` und ``MoveBeforeInTabOrder`` die Tab-Reihenfolge festlegen.
Hallo midan23!

Du kannst damit von einem ListCtrl das andere ListCtrl als Tabziel angeben. Und umgekehrt. Dann musst du nur noch den Fokus auf eine der beiden ListCtrls setzen. Und schon kommt man von einer Liste direkt zur anderen Liste.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

Liest sich ja in der Theorie ganz gut ... aber
wx._core.PyAssertionError: C++ assertion "i" failed at ..\..\src\common\wincmn.cpp(2672) in wxWindowBase::DoMoveInTabOrder(): MoveBefore/AfterInTabOrder(): win is not a sibling
Scheint als könnte man kein wx.ListCtrl als Parameter übergeben ...

Da die beiden wx.ListCtrl-Elemente in verschiedenen Panels sind, hab ich die Panels als Parameter übergeben ... Keine Wirkung ...
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

Meine Alternative scheint zu funktionieren ...
  1. Alle 4 wx.Panels haben als "style"-Parameter den Wert "wx.NO_BORDER"
  2. Das zusammenfassende wx.Panel merkt sich das aktive Panel
  3. Die wx.AcceleratorTable des zusammenfassenden wx.Panel-Elements enthält einen Eintrag, um bei Betätigen der Tab-Taste eine Funktion zum Wechseln des aktiven wx.ListCtrls auszuführen
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

midan23 hat geschrieben:Da die beiden wx.ListCtrl-Elemente in verschiedenen Panels sind
Hallo midan32!

Ja, die Praxis hat oft ein paar Überaschungen auf Lager, die in der Theorie nicht sein dürften. ;-)

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten