ComboBox mit Autovervollständigung

Plattformunabhängige GUIs mit wxWidgets.
Antworten
adridon
User
Beiträge: 2
Registriert: Samstag 7. März 2009, 23:42

Samstag 7. März 2009, 23:56

Einen schönen guten Abend!

Für eine Anwendung benötige ich folgende Funktionalität und kann mir nicht vorstellen, dass es da keine Möglichkeit gibt, das halbwegs gescheit umzusetzen. Ich habe schon gesucht und auch ein wenig im Demo-Code rumgespielt, aber so richtig glücklich bin ich dadurch nicht geworden.

Ich habe eine Liste von vielen Leuten, bestehend aus einem Kürzel und dem vollständigen Namen. Nun möchte ich in einer Art Combobox entweder das Kürzel oder den Namen anfangen einzutippen und das sich dadurch öffnende Popup unterhalb dieser Combobox zeigt mir nur noch Einträge an, die der Eingabe entsprechen. Es würde mir sogar reichen, wenn nur nach dem Kürzel gefiltert wird ;-)

Es sollen aber wie gesagt zwei Spalten erscheinen, so dass man immer den entsprechenden Namen zum Kürzel angezeigt bekommt.

Man kann nun entweder weiterschreiben und dadurch die Auswahl weiter einschränken oder mit den Pfeiltasten durch die Ergebnisse navigieren und dann eins mit Enter auswählen.

Ich weiß nicht, ob man mit diesem ComboCtrl was reißen kann, so richtig bin ich noch nicht dahinter gestiegen.

Hat vielleicht von euch jemand eine Idee, wie man dieses Problem am elegantesten angeht?

Ich danke euch schonmal im Voraus ;-)
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Sonntag 8. März 2009, 18:56

herzlich willkommen im forum
in der demo gibt es das listbox tool das dir den event den du möchtest liefert es wird eine liste aller möglichen inputs generiert bei drücken von Buchstabe wird zum jeweils nächsen weitergesprungen
adridon
User
Beiträge: 2
Registriert: Samstag 7. März 2009, 23:42

Sonntag 8. März 2009, 22:30

Ja, dass das bei der Listbox funktioniert, hab ich schon gesehen. Ich möchte allerdings nicht, dass die Listbox die ganze Zeit angezeigt wird, sondern nur wenn das entsprechende TextCtrl Feld den Fokus hat. Kann ich das irgendwie gescheit kombinieren?
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Montag 9. März 2009, 11:27

ich hab dir mal ein beispiel gefummelt vieleicht hilft das auf die sprünge

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx

wx.SetDefaultPyEncoding("iso-8859-1")

class MyFrame(wx.Frame):

    def __init__(self, parent = None, id = -1, title = "wxPython ListCtrl", size = (300, 200)):
       
        wx.Frame.__init__(self, parent, id, title, size = size)

        self.panel = wx.Panel(self,-1)
       
        self.liste = ["r", "l", "d", "t", "x", "t", "a", "b", "c", "d", "G", "E", "a", "b", "c", "d"]
        wx.StaticText(self.panel, -1, "Liste:", (15, 15))
        self.lb1 = wx.ListBox(self.panel,-1, (15, 25), (0,0),self.liste, wx.LB_SINGLE)

        self.eingabe = wx.TextCtrl(self.panel, -1, "Hier mit der Mouse Klicken",pos=(120,50), size=(150, -1))
        wx.CallAfter(self.eingabe.SetInsertionPoint, 0)
        self.eingabe.Bind(wx.EVT_SET_FOCUS, self.on_set_focus_eingabe)

        self.bu_liste = wx.Button(self.panel,-1, "Liste Ein/Aus", (120, 20))
        self.Bind(wx.EVT_BUTTON, self.button_liste_press, self.bu_liste)

    def button_liste_press(self, event = None):
        if self.lb1.GetSize()[0]>0:
            self.lb1.SetSize([0,0])
        else:
            self.lb1.SetSize([30,125])
        
    def on_set_focus_eingabe(self, evt):
        self.lb1.SetSize([30,125])
        evt.Skip()

        
    def close_frame(self, event = None):
        self.Close()

if __name__ == "__main__":
   
    app = wx.PySimpleApp()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()
Antworten