Mehrere nichtmodale Widgets öffnen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

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 ?
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

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
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

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