Rückgabe aus Dialog

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Byte
User
Beiträge: 63
Registriert: Dienstag 26. September 2006, 07:04

Montag 23. Oktober 2006, 07:31

Hallo,

wie kann man Daten die in einem Dialog aus einem listCtrl ausgewählt wurden an das Hauptprogramm übergeben?

Bisheriges Vorgehen:
  • Dialog öffnen (funktioniert)
    Liste anzeigen (funktioniert)
    Zeile auswählen (funktioniert)
    Werte übergben (keine Ahnung)
    Dialog beenden (funkioniert)
In den wxPython Demos, habe ich bzgl. der Rückgabe aus einem Dialog nichts gefunden.

Wer kann mir einen Tip geben wie man das machen kann?

Danke

Christian
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Montag 23. Oktober 2006, 07:53

Hey Byte,

schau dir mal in den wxWidgets-Helpfiles folgendes an:
wxDialog::SetReturnCode
void SetReturnCode(int retCode)

Sets the return code for this window.

Parameters

retCode

The integer return code, usually a control identifier.
greets george
Byte
User
Beiträge: 63
Registriert: Dienstag 26. September 2006, 07:04

Montag 23. Oktober 2006, 08:30

Hi George,

danke für deine schnelle Antwort, aber das ist nicht ganz das was ich brauche, ich will eine beliebige Variable übergeben.

Wenn ich z.B. einen Dialog mit einem TextCtrl habe, wie kann ich dann den Inhalt des TextCtrl im Hauptprogramm weiterverarbeiten?

Gruß Christian
Benutzeravatar
Shana
User
Beiträge: 28
Registriert: Dienstag 22. August 2006, 11:58
Wohnort: Bremen
Kontaktdaten:

Montag 23. Oktober 2006, 08:35

Hey Byte,

ich würd an deiner Stelle einfach die Klasse Dialog beerben, dann kannst du ja den Rückgabewert selbst bestimmen.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 23. Oktober 2006, 08:53

Byte hat geschrieben:wie kann man Daten die in einem Dialog aus einem listCtrl ausgewählt wurden an das Hauptprogramm übergeben?
Hi Christian!

Hier die Instant-Version:

Code: Alles auswählen

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

import wx


def main():
    app = wx.PySimpleApp()
    
    choices = ["erster", "zweiter"]
    diag = wx.SingleChoiceDialog(
        parent = None, message = "Bitte waehlen Sie aus", caption = "Auswahl",
        choices = choices
    )
    if diag.ShowModal() == wx.ID_OK:
        print choices[diag.GetSelection()]
    else:
        print "Abbruch"
    
    
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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 23. Oktober 2006, 09:08

...und hier die Komfortversion:

Code: Alles auswählen

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

import wx


class MyDialog(wx.Dialog):
    def __init__(
        self, parent = None, id = -1, title = "Auswahl", message = "Bitte waehlen Sie aus"
    ):
        wx.Dialog.__init__(self, parent, id, title)
        
        border_box = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(border_box)
        
        vbox = wx.BoxSizer(wx.VERTICAL)
        border_box.Add(vbox, 1, wx.ALL | wx.EXPAND, 5)
        
        lab = wx.StaticText(self, -1, message)
        vbox.Add(lab, 0, wx.ALL, 10)
        
        choices = ["erster", "zweiter"]
        self.choices = choices
        
        listbox = wx.ListBox(self, -1, choices = choices, size = (200, 100))
        vbox.Add(listbox, 1, wx.ALL | wx.EXPAND, 5)
        listbox.SetSelection(0)
        self.listbox = listbox
        
        border_box.Add(wx.StaticLine(self), 0, wx.EXPAND)
        
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        border_box.Add(hbox, 0, wx.ALL | wx.EXPAND, 5)
        
        cmd_cancel = wx.Button(self, wx.ID_CANCEL, "Abbrechen")
        hbox.Add(cmd_cancel, 0, wx.ALL, 5)
        
        hbox.Add((0, 0), 1)
        
        cmd_ok = wx.Button(self, wx.ID_OK, "OK")
        hbox.Add(cmd_ok, 0, wx.ALL, 5)
        
        self.Fit()
    
    
    def get_selection(self):
        listbox = self.listbox
        choices = self.choices
        return choices[listbox.GetSelection()]
    

def main():
    app = wx.PySimpleApp()
    
    diag = MyDialog()
    
    if diag.ShowModal() == wx.ID_OK:
        print diag.get_selection()
    else:
        print "Abbruch"
    
    
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.
Byte
User
Beiträge: 63
Registriert: Dienstag 26. September 2006, 07:04

Montag 23. Oktober 2006, 18:46

Hi Gerold,

danke, die Komfortversion war genau richtig. Habe es eingebaut und jetzt funktioniert es.

Christian
Antworten