Widget conteneur personnalisé
Bonjour,
Je reviens vous voir pour la création d'un widget personnalisé.
J'aimerai créer une grouBox avec une propriété selected en plus.
J'ai pensé, naïvement peu être, qu'un simple True dans la méthode isContainer du plugin suffirait. Apparament non !
Mon plugin :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class ParamsGroupPlugin(QtDesigner.QPyDesignerCustomWidgetPlugin):
def __init__(self, parent=None):
super(ParamsGroupPlugin, self).__init__(parent)
self.initialized = False
def initialize(self, core):
if self.initialized:
return
self.initialized = True
def isInitialized(self):
return self.initialized
def createWidget(self, parent):
return ParamsGroup(parent)
def name(self):
return "ParamsGroup"
def group(self):
return "Les widgets Diam"
def isContainer(self):
return True
def domXml(self):
return ('<widget class="ParamsGroup" name="ParamsGroup">'
' <widget class="QWidget" name="page" />'
'</widget>')
def includeFile(self):
return "paramsGroup" |
Mon widget :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
class ParamsGroup(QtGui.QWidget):
selectChanged = QtCore.pyqtSignal(bool)
def __init__(self, parent=None):
super(ParamsGroup, self).__init__(parent)
self.styleSheet = " QGroupBox { ... }"
self.setStyleSheet(self.styleSheet)
self.group = QtGui.QGroupBox(self)
self._title = "sous-groupe"
self.group.setTitle(self._title)
self.widget = QtGui.QWidget()
self._selected = False
self.group.setProperty("selected", self._selected)
self.widget.setParent(self.group)
self.outLayout = QtGui.QGridLayout()
self.outLayout.addWidget(self.group, 0,0)
self.setLayout(self.outLayout)
def selected(self):
return self._selected
@QtCore.pyqtSlot(bool)
def setSelected(self, s):
if s != self._selected:
self._selected = s
self.group.setProperty("selected", s)
self.setStyleSheet(self.styleSheet)
self.emit(QtCore.SIGNAL("selectChanged(bool)"), s)
selected = QtCore.pyqtProperty(bool, selected, setSelected)
def title(self):
return self._title
@QtCore.pyqtSlot(str)
def setTitle(self, title = "sous-groupe"):
if title != self._title:
self.group.setTitle(title)
title = QtCore.pyqtProperty(str, title, setTitle) |
Le souci vient quand je l'ouvre dans Designer. Je ne peux pas lui associer un Layout avec la fonction "Mettre en page".
Merci