Hi,
ich möchte die gesamte Bedienung mit "ENTER" durchführen, d.h. erste Eingabe:X1 -> ENTER -> jetzt ist X2 aktiv -> ENTER -> ...-> Enter -> Berechnen-Button ist aktiv -> ENTER -> Ausgabe-Button ist aktiv.
Wie kann ich das machen?
CODE AUSGELAGERT: http://paste.pocoo.org/show/91861/
Edit by Gerold: Code ausgelagert
[gelöst] Entry-Eingaben mit ENTER Taste steuern
Ich habe es mit zumindest geschafft, dass ich mit TAB alle Textctrl's in einem Panel nacheinander ansprechen kann, ohne dass das Panel gewechselt wird.
Das ist aber nicht zufriedenstellend. Gibt es denn keine Möglichkeit mit ENTER innerhalb des Panels zu bleiben und die Textctrl's zu durchlaufen???
Mit SetDefaultItem und GetDefaultItem scheint mir sehr aufwändig für mein "triviales" Problem, wenn es denn überhaupt richtig ist.
Eine Antwort wäre mir wirklich wichtig.
Gruß Mathi
Code: Alles auswählen
style = wx.TE_PROCESS_ENTER
Das ist aber nicht zufriedenstellend. Gibt es denn keine Möglichkeit mit ENTER innerhalb des Panels zu bleiben und die Textctrl's zu durchlaufen???
Mit SetDefaultItem und GetDefaultItem scheint mir sehr aufwändig für mein "triviales" Problem, wenn es denn überhaupt richtig ist.
Eine Antwort wäre mir wirklich wichtig.
Gruß Mathi
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Mathi!mathi hat geschrieben:Gibt es denn keine Möglichkeit mit ENTER innerhalb des Panels zu bleiben und die Textctrl's zu durchlaufen?
Ja, die gibt es.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import wx
wx.SetDefaultPyEncoding("iso-8859-15")
class MyPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.SetBackgroundColour("yellow")
vbox = wx.BoxSizer(wx.VERTICAL)
self.SetSizer(vbox)
txt1 = wx.TextCtrl(self, size = (100, -1))
self.txt1 = txt1
vbox.Add(txt1, 0, wx.EXPAND | wx.ALL, 5)
txt2 = wx.TextCtrl(self, size = (100, -1))
vbox.Add(txt2, 0, wx.EXPAND | wx.ALL, 5)
txt3 = wx.TextCtrl(self, size = (100, -1), style = wx.TE_PROCESS_ENTER)
vbox.Add(txt3, 0, wx.EXPAND | wx.ALL, 5)
txt3.Bind(wx.EVT_CHAR, self.on_txt3_char)
def on_txt3_char(self, event):
if event.GetKeyCode() == wx.WXK_RETURN:
self.txt1.SetFocus()
self.txt1.SelectAll()
event.Skip()
class MyFrame(wx.Frame):
def __init__(self, parent = None, title = "Example"):
wx.Frame.__init__(self, parent, -1, title)
base_panel = wx.Panel(self)
hbox_main = wx.BoxSizer(wx.HORIZONTAL)
base_panel.SetSizer(hbox_main)
self.left_panel = MyPanel(base_panel)
hbox_main.Add(self.left_panel, 1, wx.EXPAND | wx.ALL, 3)
self.right_panel = MyPanel(base_panel)
hbox_main.Add(self.right_panel, 1, wx.EXPAND | wx.ALL, 3)
# Layout
base_panel.Fit()
self.Fit()
self.SetMinSize(self.GetSize())
def main():
"""Testing"""
app = wx.PySimpleApp()
f = MyFrame()
f.Center()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hallo Gerold,
Du hilfst mir irgendwie immer aus der Klemme
,
aber bei Deinem Beispiel kannst Du mit ENTER im aktuellen Panel alle Textctrl's nacheinander ansprechen und mußt nur den Letzten an die Methode on_txt3_char binden. Mein Problem ist aber, dass in meinem Programm nach Eingabe von X1 -> Enter -> der Focus auf das nächste Panel wechselt (Button Berechnung), das sollte doch aber erst nach Eingabe aller TxtCtrl's im Eingabepanel paasieren.
Ich hoffe Du verstehst.
Du hilfst mir irgendwie immer aus der Klemme

aber bei Deinem Beispiel kannst Du mit ENTER im aktuellen Panel alle Textctrl's nacheinander ansprechen und mußt nur den Letzten an die Methode on_txt3_char binden. Mein Problem ist aber, dass in meinem Programm nach Eingabe von X1 -> Enter -> der Focus auf das nächste Panel wechselt (Button Berechnung), das sollte doch aber erst nach Eingabe aller TxtCtrl's im Eingabepanel paasieren.
Ich hoffe Du verstehst.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo mathi!mathi hat geschrieben:Mein Problem ist aber, dass in meinem Programm nach Eingabe von X1 -> Enter -> der Focus auf das nächste Panel wechselt
Ich hatte mir dein Beispiel gar nicht angesehen, weil es zu groß ist um nur mal kurz darüberzulesen.
Dein Problem ist, dass du den Standard-Style des Panels überschreibst. Der Standardstyle ist ``wx.TAB_TRAVERSAL``!!!
So funktioniert es:
Code: Alles auswählen
wx.Panel.__init__(self, parent, style = wx.TAB_TRAVERSAL | wx.BORDER_RAISED)
mfg
Gerold

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