Kontrolle über die Tastatur-Navigation

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

Kontrolle über die Tastatur-Navigation

Beitragvon midan23 » Mittwoch 2. Januar 2008, 10:59

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Kontrolle über die Tastatur-Navigation

Beitragvon gerold » Mittwoch 2. Januar 2008, 11:22

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: 116
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

Re: Kontrolle über die Tastatur-Navigation

Beitragvon midan23 » Mittwoch 2. Januar 2008, 13:03

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Kontrolle über die Tastatur-Navigation

Beitragvon gerold » Mittwoch 2. Januar 2008, 14:01

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: 116
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

Beitragvon midan23 » Mittwoch 2. Januar 2008, 14:11

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: 116
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

Beitragvon midan23 » Mittwoch 2. Januar 2008, 14:24

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Mittwoch 2. Januar 2008, 14:47

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder