Seite 1 von 1

Auslesen und Setzen von Daten

Verfasst: Freitag 21. Dezember 2007, 16:07
von Mawilo
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

Verfasst: Sonntag 23. Dezember 2007, 10:30
von snakeseven
Hey Mawilo,
vieleicht hilft dir das ja weiter?

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

Gruß, Seven

Verfasst: Mittwoch 26. Dezember 2007, 23:06
von Mawilo
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

Verfasst: Mittwoch 2. Januar 2008, 09:38
von snakeseven
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

Verfasst: Mittwoch 2. Januar 2008, 19:37
von Mawilo
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