Auslesen und Setzen von Daten

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

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
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Hey Mawilo,
vieleicht hilft dir das ja weiter?

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

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

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
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

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: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

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
Antworten