Seite 1 von 1

[gelöst] Entry-Eingaben mit ENTER Taste steuern

Verfasst: Mittwoch 19. November 2008, 15:40
von mathi
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

Verfasst: Donnerstag 20. November 2008, 07:51
von mathi
Ich habe es mit

Code: Alles auswählen

 style = wx.TE_PROCESS_ENTER
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

Verfasst: Donnerstag 20. November 2008, 08:20
von gerold
mathi hat geschrieben:Gibt es denn keine Möglichkeit mit ENTER innerhalb des Panels zu bleiben und die Textctrl's zu durchlaufen?
Hallo Mathi!

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()
mfg
Gerold
:-)

Verfasst: Donnerstag 20. November 2008, 08:32
von mathi
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.

Verfasst: Donnerstag 20. November 2008, 09:04
von gerold
mathi hat geschrieben:Mein Problem ist aber, dass in meinem Programm nach Eingabe von X1 -> Enter -> der Focus auf das nächste Panel wechselt
Hallo mathi!

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
:-)

Verfasst: Donnerstag 20. November 2008, 09:27
von mathi
mensch Gerold, ich bin begeistert, VIELEN Dank für Deine schnelle und ergiebige Hilfe :-)

Gruß mathi