clonen von widgets
-
Dauerbaustelle
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Pfui, das brauchst du nicht. Ansonsten mal deepcopy versuchen.
ich würde gerne widgets vervielfältigen ohne vorher zu wissen, worum es sich handelt.
z.B.: ich habe eine tabelle die nur mit einigen werten gefüllt ist und deren leere zellen nach bestimmten mustern gefüllt werden müssen. jetzt möchte ich gerne diese tabelle vervielfältigen, um mit den basiswerten verschiedene wege ausprobieren zu können.
wenn ich weiß, dass es sich um eine tabelle mit x spalten und y zeilen handelt und die grundwerte kenne ist das natürlich einfach aber wenn jemand anderes die tabelle vorgibt oder gar ein ganz anderes szenario, würde ich gerne in der lage sein trotzdem x clone erstellen zu können.
z.B.: ich habe eine tabelle die nur mit einigen werten gefüllt ist und deren leere zellen nach bestimmten mustern gefüllt werden müssen. jetzt möchte ich gerne diese tabelle vervielfältigen, um mit den basiswerten verschiedene wege ausprobieren zu können.
wenn ich weiß, dass es sich um eine tabelle mit x spalten und y zeilen handelt und die grundwerte kenne ist das natürlich einfach aber wenn jemand anderes die tabelle vorgibt oder gar ein ganz anderes szenario, würde ich gerne in der lage sein trotzdem x clone erstellen zu können.
-
Dauerbaustelle
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Hää?
ich habe eine basistabelle vorgegeben und kann sie auf drei arten füllen. also möchte ich gerne drei tabellen darstellen, um in jeder einen dieser wege zu gehen.
diese drei tabellen sollten exakte abbilder der basistabelle sein. ich würde also gerne, wärend das programm läuft, drei kopien der basistabelle erstellen und anzeigen.
diese drei tabellen sollten exakte abbilder der basistabelle sein. ich würde also gerne, wärend das programm läuft, drei kopien der basistabelle erstellen und anzeigen.
In deinem Fall solltest du nicht die Widgets kopieren, sondern deren Werte in ein Dict abbilden - damit kannst du dann arbeiten und dein Resultat dann am Ende wieder in die Entries eintragen.
Vielleicht gibt es statt der Dicts sogar noch eine bessere Möglichkeit - ich kenne leider keine. Aber eigentlich müsste man das mit Dicts schon recht komfortabel hinbekommen.
Direkt mit den Widgets zu arbeiten und diese als "Werte" zu missbrauchen ist m.E. schlechter Stil.
//edit:
Naja, wenn du wirklich 3 Tabellen anzeigen möchtest, hilft dir obiges natürlich auch nicht weiter. Hier würde ich mir sogar überlegen, direkt zu zeichnen - oder gibt es einen Grund, 3 Tabellen mit jeweils der Möglichkeit zur Benutzereingabe zu haben?
Vielleicht gibt es statt der Dicts sogar noch eine bessere Möglichkeit - ich kenne leider keine. Aber eigentlich müsste man das mit Dicts schon recht komfortabel hinbekommen.
Direkt mit den Widgets zu arbeiten und diese als "Werte" zu missbrauchen ist m.E. schlechter Stil.
//edit:
Naja, wenn du wirklich 3 Tabellen anzeigen möchtest, hilft dir obiges natürlich auch nicht weiter. Hier würde ich mir sogar überlegen, direkt zu zeichnen - oder gibt es einen Grund, 3 Tabellen mit jeweils der Möglichkeit zur Benutzereingabe zu haben?
ojee, dann liegt bei mir wohl ein fall von unbewusstem, absichtlichen stilbruch vor: ich wollte es vermeiden "statisch" direkt auf die werte zuzugreifen, da es denkbar ist, dass sich die szenarios verändern, so dass als Basistabelle plötzlich nicht mehr nur eine einfache, sondern evtl. eine verschachtelte tabelle gegeben ist.
z.b. in zelle (1,1) wäre dann eine weitere 2x2-tabelle zu finden, während die anderen zellen mit entry-widgets gefüllt wären.
für diesen fall müsste dann die routine für die text-erfassung wieder geändert werden.
ich hatte gehöfft, mit hilfe einer copy-routine eine größere fexibilität zu erreichen.
edith antwortet auf edit: die werte müssen später weiterverarbeitet werden, deswegen hätte ich gerne eine benutzereingabe.
z.b. in zelle (1,1) wäre dann eine weitere 2x2-tabelle zu finden, während die anderen zellen mit entry-widgets gefüllt wären.
für diesen fall müsste dann die routine für die text-erfassung wieder geändert werden.
ich hatte gehöfft, mit hilfe einer copy-routine eine größere fexibilität zu erreichen.
edith antwortet auf edit: die werte müssen später weiterverarbeitet werden, deswegen hätte ich gerne eine benutzereingabe.
wenn ich richtig verstehe, was du mit populate-routine meinst, wird das wohl zwingend ein teil der lösung sein. ich bin aber ja noch gar nicht soweit die werte eintragen zu können. mein problem ist ja noch im obigen beispiel kopien der tabelle automatisch zu erzeugen.
-
BlackJack
Brauchst Du denn wirklich Kopien der GUI-Elemente? Für mich hört sich das so ein bisschen danach an, dass Du die Datenhaltung nicht in einem Modell, sondern in der GUI hast.
ich muss die GUI elemente ja erschaffen, da ich nicht nacheinander in einem element alle fälle bearbeiten möchte (zur not wäre das zwar auch möglich, ich würde aber gerne darauf verzichten), deswegen wären kopien sehr nützlich. ich hatte aber nicht vor sie zur konservierung der werte zu misbrauchen.
Die GUI Elemente besitzen ja zum Teil auch schon eigene Instanzen für die Daten (z.B. TreeView/TreeModel).
Vielleicht reicht es für deinen Zweck ja auch, ein Model mit mehreren Views zu teilen? (Ich verstehe immer noch nicht wirklich, was du eigentlich vorhast.)
Das würde dann nämlich mit get_model() und set_model() funktionieren. Dann hättest du gleiche Daten und verschiedene GUI-Elemente, die mit den gleichen Daten gefüllt sind.
Vielleicht reicht es für deinen Zweck ja auch, ein Model mit mehreren Views zu teilen? (Ich verstehe immer noch nicht wirklich, was du eigentlich vorhast.)
Das würde dann nämlich mit get_model() und set_model() funktionieren. Dann hättest du gleiche Daten und verschiedene GUI-Elemente, die mit den gleichen Daten gefüllt sind.
leider mit einiger verspätung die antwort auf deine antwort (urlaub war schuld):
mal gucken, ob ich es noch anders umschreiben kann. ich wollte ein widget vervielfältigen, ohne dass ich in einem konkreten fall den konstruktor vorher kenne.
ich denke, dass ich jetzt aber doch lieber mit reparent oder einem im voraus bekannten konstruktor arbeiten werde.
danke für den anstoß in richtung treeview, hatte noch nicht in betracht gezogen, TV als tabellenersatz zu nutzen, was auf grund des zugrunde liegenden models praktisch wäre.
mal gucken, ob ich es noch anders umschreiben kann. ich wollte ein widget vervielfältigen, ohne dass ich in einem konkreten fall den konstruktor vorher kenne.
ich denke, dass ich jetzt aber doch lieber mit reparent oder einem im voraus bekannten konstruktor arbeiten werde.
danke für den anstoß in richtung treeview, hatte noch nicht in betracht gezogen, TV als tabellenersatz zu nutzen, was auf grund des zugrunde liegenden models praktisch wäre.
