clonen von widgets

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
sylpheed
User
Beiträge: 40
Registriert: Dienstag 24. März 2009, 13:58

gibt es in python die möglichkeit ein widget mitsamt darin befindlicher widgets zu clonen? z.B. gtk.Table mit gtk.Entry in den zellen.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Pfui, das brauchst du nicht. Ansonsten mal deepcopy versuchen.
sylpheed
User
Beiträge: 40
Registriert: Dienstag 24. März 2009, 13:58

Dauerbaustelle hat geschrieben:Pfui, das brauchst du nicht. Ansonsten mal deepcopy versuchen.
*lach* warum ist das so verpönt?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das riecht nach schlechtem Code. Was willst du denn überhaupt bezwecken?
sylpheed
User
Beiträge: 40
Registriert: Dienstag 24. März 2009, 13:58

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.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Hää?
sylpheed
User
Beiträge: 40
Registriert: Dienstag 24. März 2009, 13:58

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.
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

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?
sylpheed
User
Beiträge: 40
Registriert: Dienstag 24. März 2009, 13:58

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du solltest besser eine ``populate``-"Routine" schreiben, die die Werte einträgt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sylpheed
User
Beiträge: 40
Registriert: Dienstag 24. März 2009, 13:58

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.
sylpheed
User
Beiträge: 40
Registriert: Dienstag 24. März 2009, 13:58

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.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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.
sylpheed
User
Beiträge: 40
Registriert: Dienstag 24. März 2009, 13:58

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.
Antworten