[wxPython] wie Werte an Controls zuweisen, auslesen
Hallo, ich brauche mal ein paar Tipps, um folgendes zu realisieren: 1. Definition von Controls Folgende Zuweisungen führe ich durch: self.txtFirmNummer = wx.xrc.XRCCTRL(self.nb1pane1, "firm_nummer") self.txtFirmName = wx.xrc.XRCCTRL(self.nb1pane1, "firm_name") self.txtFirmVorname = wx.xrc.XRCCTRL(self.nb1pane1, "firm_vorname") Wie kann ich alle definierten Namen von Controls aus einem *.xrc File bekommen? (zB. firm_name, firm_vorname, ... lt. obigem Beispiel) Wie kann ich in einer Schleife o.ä. die Zuweisung lt. obigem Bsp. vereinfachen? 2. Zuweisen von Daten an Controls Wie geht das Zuweisen von Daten an die Controls eleganter? Bsp: for key in res: self.txtFirmNummer.SetValue(str(key["firm_nummer"])) self.txtFirmName.SetValue(key["firm_name"]) self.txtFirmVorname.SetValue(key["firm_vorname"]) (Die Daten stammen aus eine DB-Abfrage) 3. Auslesen von Daten der Controls Wie bekomme ich die Controls in einer Schleife ausgelesen, um geänderte Daten wieder in die DB zurück zuschreiben? Danke Andreas _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Wie kann ich alle definierten Namen von Controls aus einem *.xrc File bekommen? (zB. firm_name, firm_vorname, ... lt. obigem Beispiel)
keine Ahnung - kenne mich mit wx nicht aus3
Wie kann ich in einer Schleife o.ä. die Zuweisung lt. obigem Bsp. vereinfachen?
zb so: for name in ["firm_nummer", "firm_name", "firm_vorname"]: setattr(self, name, wx.xrc.XRCCTRL(self.nb1pane1, name)
2. Zuweisen von Daten an Controls Wie geht das Zuweisen von Daten an die Controls eleganter? Bsp: for key in res: self.txtFirmNummer.SetValue(str(key["firm_nummer"])) self.txtFirmName.SetValue(key["firm_name"]) self.txtFirmVorname.SetValue(key["firm_vorname"]) (Die Daten stammen aus eine DB-Abfrage)
auch hier kannst du grundsaetzlich den setattr/getattr Kram machen, durch gleiche Namen erhoeht sich dann die deklarativitaet: for key, value in res.items(): for name in ["firm_nummer", "firm_name", "firm_vorname"]: control = getattr(self, name) control.SetValue(value) Falls du auf typ-probleme stoesst, musst du da noch coercions einbauen, zb durch sowas hier: coercers = {'firm_nummer' : str} Dann aendert sich die setvalue-Zeile so: control.SetValue(coercers.get(name, lambda x: x)(value))
3. Auslesen von Daten der Controls Wie bekomme ich die Controls in einer Schleife ausgelesen, um geänderte Daten wieder in die DB zurück zuschreiben?
Letztlich wie oben beschrieben.... Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Hallo Diez, Diez B. Roggisch schrieb:
zb so:
for name in ["firm_nummer", "firm_name", "firm_vorname"]: setattr(self, name, wx.xrc.XRCCTRL(self.nb1pane1, name)
[...]
auch hier kannst du grundsaetzlich den setattr/getattr Kram machen, durch gleiche Namen erhoeht sich dann die deklarativitaet:
for key, value in res.items(): for name in ["firm_nummer", "firm_name", "firm_vorname"]: control = getattr(self, name) control.SetValue(value)
Der Hinweis auf setattr / getattr war es, welchen ich benötigte. Habe damit bis jetzt selten gearbeitet. Wie beschrieben funktioniert das ganze jetzt prima. Außerdem ist es leichter zu pflegen und leichter lesbar.
Falls du auf typ-probleme stoesst, musst du da noch coercions einbauen, zb durch sowas hier:
coercers = {'firm_nummer' : str}
Das mit den coercions habe ich nicht so recht verstanden. Gibt es da irgendwelche Beispiele im Net? Habe beim Googlen nicht s brauchbares gefunden.
Dann aendert sich die setvalue-Zeile so:
control.SetValue(coercers.get(name, lambda x: x)(value))
Eine Lösung für mein Problem habe ich nun gefunden. Danke! Andreas _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Das mit den coercions habe ich nicht so recht verstanden. Gibt es da irgendwelche Beispiele im Net? Habe beim Googlen nicht s brauchbares gefunden.
Ich haette auch casting sagen koennen. Coercions sind implizit, castings explizit. Letztlich gings mir darum das deine Werte uU eine typwandlung benoetigen, bevor sie im Control erscheinen koennen, und besonders wenn man sie da wieder rausholen moechte. Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (2)
-
Andreas Kaiser
-
Diez B. Roggisch