Seite 1 von 1

Buttons durch Programm selbst in Dialog einfügen

Verfasst: 15. März 2009 18:56
von albi
Hallo,

ich bin gerade dabei ein Programm in python zu schreiben. Für die grafische Oberfläche verwende ich PyQt4. Ich habe mit dem Qt-Desinger einen Dialog erstellt und die ui in ein .py umgewandelt. So weit so gut. Jetzt möchte ich aber durch das Programm noch weitere Buttons in den Dialog einfügen lassen. Dazu habe ich eine liste in der so etwa 6-8 Strings enthalten sind. Bei jedem Aufruf des Dialogs soll nun für jeden dieser Strings ein Check-Button erstellt werden. Das Problem ist, dass sich die liste verändern kann, deshalb kann ich die Buttons nicht fest einbinden.
Ist so etwas möglich und wenn ja, wie?

Danke für die Hilfe

Mfg albi

Verfasst: 16. März 2009 12:14
von franzf
Du musst irgendwo in deinem ui ein Layout haben, in dem die Buttons angeordnet sind. Was spricht dagegen, je nach Anforderung diesem einen Button mit addWidget() hinzuzufügen?

Jetzt stellt sich nur noch die Frage, ob du auch während der Dialog bereits offen ist, noch CheckBoxen hinzufügen können musst, oder ob bereits beim Starten des Dialogs alles bekannt ist.

Für ersteres bietet sich eine Methode

Code: Alles auswählen

def addCheckBox( self, label ):
an, welche dann dem (privaten?) ui eine CheckBox ginzufügt und ggf. SIGNALS connected.

Für zweiteres sollte es reichen, wenn du dem Konstruktor eine string-list übergibst, und diese gleich dort hinzufügst. Ich bin mir sicher das willst du.

Verfasst: 16. März 2009 19:39
von albi
Hallo franzf,

danke für die Tipps. Das hat mich weitergebracht.

Mit dem folgenden Code im Konstruktor werden die Buttons in den Dialog eingefügt und über die Liste self.buttonliste habe ich dann zugriff auf die einzellen Buttons:

Code: Alles auswählen

	for vm in listeVm:
	    self.vm_bu = QtGui.QCheckBox(self.layoutWidget) 
	    self.vm_bu.setChecked(True)
	    self.vm_bu.setObjectName(vm[1])
	    self.vm_bu.setText(vm[1])
	    self.verticalLayout.addWidget(self.vm_bu)
	    self.buttonliste+=[self.vm_bu]

Mfg
albi