2017-03-29 1 views
0

Also habe ich versucht, mehrere Checkboxen in einem QDockwidget zu machen, aber ich scheine nur in der Lage zu sein, eins hinzuzufügen. Das ist was ich habeMehrere Checkboxen in QDockWidget

def createDockWindows(self): 
    cboxes = gui.QDockWidget("Cboxes", self) 
    #cboxes.setWidget(gui.QCheckBox()) 
    cboxes.setAllowedAreas(core.Qt.LeftDockWidgetArea) 

    self.c0 = gui.QCheckBox("B0") 
    self.c0.setChecked(False) 
    self.c0.stateChanged.connect(lambda:self.btnstate(self.c0)) 
    cboxes.setWidget(self.c0) 

    self.c1 = gui.QCheckBox("B1") 
    self.c1.setChecked(False) 
    self.c1.stateChanged.connect(lambda:self.btnstate(self.c1)) 
    cboxes.setWidget(self.c1) 

    self.addDockWidget(core.Qt.LeftDockWidgetArea, cboxes) 

Die Ausgabe gibt mir nur die Box für B1.

Ich habe die Dock-Methode gemacht, weil ich einige Matplotlib-Diagramme über rechts, eine modifizierte Version von this Beispiel habe. Wenn es eine bessere Möglichkeit gibt, dies zu tun, würde ich mich freuen, zu ändern, ich finde nur viel mit Google nicht.

+0

Haben Sie den [Dokumentation] überprüfen (http://doc.qt.io/qt-5.8/qdockwidget.html# setWidget), um zu sehen, wie 'setWidget()' funktioniert? – rbaleksandar

+0

Ich bekomme B1 zeigt, nur B0 fehlt. Ich arbeitete von diesem Beispiel https://www.tutorialspoint.com/pyqt/pyqt_qcheckbox_widget.htm das zeigt mir mehrere Boxen. Problem ist, dass QDockWidget nicht addWidget hat. Also ich frage mich, was ich verwenden soll –

Antwort

1

Sie müssen ein neues Widget erstellen, ein Layout platzieren und die Kontrollkästchen hinzufügen. Dieses neue Widget sollten Sie dem QDockWidget hinzufügen.

def createDockWindows(self): 
    cboxes = QtGui.QDockWidget("Cboxes", self) 
    cboxes.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea) 

    w = QtGui.QWidget() 
    layout = QtGui.QVBoxLayout() 
    w.setLayout(layout) 

    self.c0 = QtGui.QCheckBox("B0") 
    layout.addWidget(self.c0) 

    self.c1 = QtGui.QCheckBox("B1") 
    layout.addWidget(self.c1) 

    cboxes.setWidget(w) 
    self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, cboxes) 

enter image description here

plus [hinzufügen QSpacer]:

def createDockWindows(self): 
    cboxes = QtGui.QDockWidget("Cboxes", self) 
    cboxes.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea) 

    w = QtGui.QWidget() 
    layout = QtGui.QVBoxLayout() 
    w.setLayout(layout) 

    self.c0 = QtGui.QCheckBox("B0") 
    layout.addWidget(self.c0) 

    self.c1 = QtGui.QCheckBox("B1") 
    layout.addWidget(self.c1) 


    spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) 
    layout.addItem(spacerItem) 

    cboxes.setWidget(w) 
    self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, cboxes) 
+0

Danke, mir fehlte 'w' hier in einem meiner Versuche. Ich habe die Checkboxen sehr weit gespreizt, gibt es eine Möglichkeit, es so aussehen zu lassen wie deine? Dies ist, was meiner aussieht wie https://i.imgur.com/vvAkMws.png –

+1

meine Lösung zu aktualisieren – eyllanesc

Verwandte Themen