Seite 1 von 1

Mehrere nichtmodale Widgets öffnen

Verfasst: Donnerstag 17. April 2014, 14:45
von mephisto-online
Hallo zusammen,

in einem Python-Pyside-Programm möchte ich bei Bedarf QWidgets auf dem Desktop öffnen und mit dem Python-Programm weiterarbeiten. Wenn ich ein Widget nicht mehr brauche, möchte ich es einfach wieder wegklicken können. Wenn ich die Widgets mit

Code: Alles auswählen

    def show_single_3d_graphics(self):
        self.single_graphics_3d_widget = DrawSingleGraphics3D(self.data_list[self.actual_base_data_set])
aus meinem Hauptklassen-Objekt aufrufe, wird natürlich bei jedem Aufruf das bestehende Widget ersetzt.

Irgendwie bin ich da im Moment etwas schwer von Kapee. :oops:

Irgendwas muss ich da wohl mit "static" machen. Aber wie ?

Re: Mehrere nichtmodale Widgets öffnen

Verfasst: Donnerstag 17. April 2014, 21:12
von mephisto-online
sorry, ich hatte vergessen anzugeben, wie die Widget-Klasse aussieht:

Code: Alles auswählen

class DrawSingleGraphics3D(QtGui.QWidget):
    def __init__(self, data):
        QtGui.QWidget.__init__(self)
        self.gl_widget = GLWidget()
...
Grüße
m-o

Re: Mehrere nichtmodale Widgets öffnen

Verfasst: Sonntag 20. April 2014, 21:53
von Madmartigan
mephisto-online hat geschrieben:Irgendwas muss ich da wohl mit "static" machen. Aber wie ?
Welcher Gedanke bringt dich auf die Annahme?

Dein Problem ist eigentlich keines, denn das, was du versuchst, ist das schlichte Handling von mehreren Objekten gleichen Typs. Wenn du einen Integer deklariert hast, weist ihm dann 5 zu und deklarierst ihn danach neu ... welchen Wert mag er dann haben? Sicherlich nicht 5. Willst du die 5 nicht überschreiben, nimm eine andere Variable oder sichere sie dir in einer Liste. Bei Bedarf kannst du dann jederzeit die 5 aus der Liste entfernen.

Das Gleiche gilt dann für deine Widgets. Statt:

Code: Alles auswählen

self.single_graphics_3d_widget = DrawSingleGraphics3D(self.data_list[self.actual_base_data_set])
kannst du beispielsweise folgendes machen:

Code: Alles auswählen

self.single_graphics_3d_widgets.append(DrawSingleGraphics3D(self.data_list[self.actual_base_data_set]))
Voraussetzung ist natürlich, dass du die Liste vorher deklariert hast.

Unerwünschte Widgets/Elemente kannst du dann bei Bedarf aus der Liste schließen/entfernen. Alternativen zur Liste sind Dictionaries oder ein eigener, schlanker WindowHandler, der Erzeugung, Management und Schließung der Widgets regelt. Letzteres ist aber vielleicht für den Zweck hier zu "advanced".