Auslesen und Setzen von Daten

Plattformunabhängige GUIs mit wxWidgets.
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Auslesen und Setzen von Daten

Beitragvon Mawilo » Freitag 21. Dezember 2007, 16:07

Hi,

ich habe schon die nächste Frage. :oops:

Ich erstelle in einer Oberfläche verschiedene Elemente über eine Schleife. Wie kann ich später auf diese Elemente zugreifen? Ich muss dort eingegebene Daten auslesen und auch vorhandene Daten in die Elemente setzen können. Weiterhin gibt es verschiedene Abhängigkeiten zwischen den Elementen einer Zeile (z.B. Wird in der ChoiceBox "zwei" ausgewählt, muss das Feld "fz" aktiv sein).
Die Anzahl der Zeilen ist variabel. Wenn bei der Dateneingabe die Zeilen nicht ausreichen, werden neue hinzugefügt.

Code: Alles auswählen

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

import wx

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

class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Test', size=(800, 800))
        self.panel = wx.Panel(self)
        self.mainsizer = wx.BoxSizer(wx.VERTICAL)
        self.panel.SetSizer(self.mainsizer)
        setButton = wx.Button(self.panel, -1, 'Daten laden')
        getButton = wx.Button(self.panel, -1, 'Daten ausgeben')
        self.Bind(wx.EVT_BUTTON, self.setData, setButton)
        self.Bind(wx.EVT_BUTTON, self.getData, getButton)
        self.mainsizer.Add(setButton)
        self.mainsizer.Add(getButton)
        for row in range(20):
            self.setNewRow(row)

    def setNewRow(self, row):
        worktypes = ['', 'eins', 'zwei', 'drei']
        nr = wx.StaticText(self.panel, -1, str(row), size=(30, 25), style=wx.BOTTOM)
        tp = wx.Choice(self.panel, -1, size=(100, 25), choices=worktypes)
        start = wx.TextCtrl(self.panel, -1, '', size=(50, 25))
        end = wx.TextCtrl(self.panel, -1, '', size=(50, 25))
        txt = wx.TextCtrl(self.panel, -1, '', size=(70, 25))
        _from = wx.TextCtrl(self.panel, -1, '', size=(50, 25))
        to = wx.TextCtrl(self.panel, -1, '', size=(50, 25))
        fz = wx.CheckBox(self.panel, -1, '', size=(30, 25))
        paid100 = wx.RadioButton(self.panel, -1, '', style=wx.RB_GROUP, size=(25, 25))
        paid50 = wx.RadioButton(self.panel, -1, '', size=(30, 25))
        paid25 = wx.RadioButton(self.panel, -1, '', size=(30, 25))
        paid0 = wx.RadioButton(self.panel, -1, '', size=(30, 25))
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(nr)
        sizer.Add(tp)
        sizer.Add(start)
        sizer.Add(end)
        sizer.Add(txt)
        sizer.Add(_from)
        sizer.Add(to)
        sizer.Add((10, 10))
        sizer.Add(fz)
        sizer.Add((10, 10))
        sizer.Add(paid100)
        sizer.Add((10, 10))
        sizer.Add(paid50)
        sizer.Add((10, 10))
        sizer.Add(paid25)
        sizer.Add((10, 10))
        sizer.Add(paid0)
        self.mainsizer.Add(sizer)

    def setData(self, event=None):
        pass

    def getData(self, event=None):
        pass

def main():
    app = wx.PySimpleApp()
    frame = MainFrame()
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()


Wie kann ich die Daten in bestimmte Elemente setzen und auslesen? Mit Tk würde ich mir die Elemente in einer Liste speichern. Das geht ja auch mit wx. Gibt es da aber einen eleganteren Weg? Gibt es eine Möglichkeit, das Element, das einen Event ausgelöst hat, zu ermitteln (so etwas wie event.widget unter Tk)?

Mawilo
Benutzeravatar
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Beitragvon snakeseven » Sonntag 23. Dezember 2007, 10:30

Hey Mawilo,
vieleicht hilft dir das ja weiter?

http://www.python-forum.de/topic-12893.html

Gruß, Seven
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Beitragvon Mawilo » Mittwoch 26. Dezember 2007, 23:06

Hi Seven,

die Beispiele habe ich mir angeschaut und einiges abgeguckt.

Ich speicher nun erst einmal alle erstellten Elemente in einem Dic ab. So kann ich die Werte der Elemente auslesen und setzen.
Gibt es eine bessere Lösung? Gibt es evtl. einen Sizer, der so etwas unterstützt oder kann man das über die Element-ID lösen?

Ich habe es leider auch nicht hinbekommen, an ein wx.TextCtrl die Tab-Taste zu binden. Ein kleines Beispiel würde mir weiterhelfen.

Viele Grüße
Mawilo
Benutzeravatar
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Beitragvon snakeseven » Mittwoch 2. Januar 2008, 09:38

Hi Mawilo,
ich bin noch sehr neu in wxPython und probiere erstmal verschiedene Sachen aus. Dewegen kann ich dir die Frage(n) leider nicht beantworten.
Im Moment jedenfalls noch nicht. Vieleicht ja bald!?

Grüße, Seven
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Beitragvon Mawilo » Mittwoch 2. Januar 2008, 19:37

snakeseven hat geschrieben:ich bin noch sehr neu in wxPython und probiere erstmal verschiedene Sachen aus.


Na da sind wir doch schon zu zweit :D
Ich arbeite auch das erste mal mit wx.Python und habe mir aus meinem beruflichen Umfeld eine Aufgabe zur Umsetzung vorgenommen.

Mawilo

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder