Eine Auswahl per Checkboxen und Rückgabe der Parameter

Plattformunabhängige GUIs mit wxWidgets.
Antworten
matmike
User
Beiträge: 2
Registriert: Donnerstag 25. Januar 2007, 11:30

Hallo Leute,

ich bin auf der Suche für das folgende Problem weder in den wxPython-Dokumentationen noch in der Forums-Suche auf eine Lösung gestoßen, obwohl es wahrscheinlich ganz einfach ist:
Ich möchte ein Fenster anzeigen, in dem der Nutzer bei den verschiedenen Optionen, die ich übergebe per Array, einen Haken setzen kann oder auch nicht. Die Anzahl an Optionen sollte hierbei variabel sein.
Das Proramm soll dann einfach ein Array zurücklieferen, in dem nach Drücken des OK-Knopfes das Ergebnis der einzelnen Checkboxen steht.
Mir sind aber bisher nur Beispiele begegnet, bei denen das Event abgefragt wird und daraufhin eine Aktion innerhalb des Fensters ausgeführt wird.
Zur Verdeutlichung der Ablauf, wie ich ihn mir vorstelle:

Funktionen aufrufen mit den anzuzeigenden Optionen
User wählt die gewünschten Optionen aus
User drückt OK-Button
Funktion liefert Array mit der Auswahl zurück

Wie müsste eine solche Funktion denn aussehen?

Vielen Dank,
MatMike
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

matmike hat geschrieben:Funktionen aufrufen mit den anzuzeigenden Optionen User wählt die gewünschten Optionen aus
User drückt OK-Button Funktion liefert Array mit der Auswahl zurück
Hi MatMike!

Willkommen im Python-Forum!

Hier ist eine der Möglichkeiten:

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 = "Example", size = wx.Size(350, 220)
    ):
        
        wx.Frame.__init__(self, parent, id, title, size = size)
        
        # Panel
        panel = wx.Panel(self)
        
        # Haupt-Sizer
        vbox_main = wx.BoxSizer(wx.VERTICAL)
        panel.SetSizer(vbox_main)
        
        # Spreizer
        vbox_main.Add((0, 0), 1)
        
        # Button
        btn_klickmich = wx.Button(panel, -1, "Klick mich...")
        vbox_main.Add(btn_klickmich, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5)
        btn_klickmich.Bind(wx.EVT_BUTTON, self.show_selected_values)
        
        # Spreizer
        vbox_main.Add((0, 0), 1)
    
    
    def show_selected_values(self, event = None):
        
        selected_list = self.ask_for_values()
        
        message = u"Hier sind die ausgewählten Werte:\n\n"
        message += ",".join(selected_list)
        
        wx.MessageBox(message, "Werte")
    
    
    def ask_for_values(self):
        """
        Zeigt einen MultiChoiceDialog an und gibt die Auswahl als Liste zurück.
        """
        
        choices = ["a", "b", "c", "d"]
        diag = wx.MultiChoiceDialog(
            self, u"Bitte wähle aus.", "Auswahl", choices = choices
        )
        if diag.ShowModal() == wx.ID_OK:
            
            selected_list = []
            for index in diag.GetSelections():
                selected_list.append(choices[index])
            return selected_list
        else:
            return []


def main():
    """Testing"""
    
    app = wx.PySimpleApp()
    f = MyFrame()
    f.Center()
    f.Show()
    app.MainLoop()


if __name__ == "__main__":
    main()
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
matmike
User
Beiträge: 2
Registriert: Donnerstag 25. Januar 2007, 11:30

Hi Gerold,

vielen Dank für das ausführliche Skript, es tut genau das, was ich mir wünsche.
Eine Frage dazu habe ich aber (natürlich :-)) noch: Kann es sein, dass die Checkboxen in Python 2.3 nocht nicht dargestellt werde, sondern es hier nur Elemente in einer Liste sind, die mit Shift und/oder Strg ausgewählt werden und Python 2.5 daraus echte Checkboxen macht? In der Anwendung, in der ich das Ganze integriert habe, werden nämlich nur die Einträge angezeigt und müssen per Shift/Strg ausgewählt werden. Die Anwendung beinhaltet eine DLL namens python23.dll, in der vermutlich auch wx mit integriert ist.

Danke,
MatMike
Antworten