Vielen Dank, habe es so wie vorgeschlagen hinbekommen. Trotzdem habe ich das Gefühl, dass es auch eleganter geht.
Ich sehe mich noch als Anfänger in Python, deswegen hätte ich gerne eine kurze Rückmeldung, was man besser machen könnte oder ob das so richtig ist.
Die Klasse, die das Widget erzeugen soll, sieht so aus
Code: Alles auswählen
class SliderWidget(QtGui.QWidget):
def __init__(self,labelText=QtCore.QString(),wert=1,parent=None):
super(SliderWidget, self).__init__(parent)
self.label = QtGui.QLabel(labelText)
self.label.setMinimumSize(QtCore.QSize(150, 60))
self.label.setMaximumSize(QtCore.QSize(150, 60))
self.horizontalLayout = QtGui.QHBoxLayout()
self.horizontalLayout.addWidget(self.label)
self.horizontalSlider = QtGui.QSlider()
self.horizontalSlider.setMinimumSize(QtCore.QSize(470, 60))
self.horizontalSlider.setMaximumSize(QtCore.QSize(470, 60))
self.horizontalSlider.setMaximum(10)
self.horizontalSlider.setPageStep(1)
self.horizontalSlider.setValue(wert)
self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
self.horizontalLayout.addWidget(self.horizontalSlider)
self.lineEdit = QtGui.QLineEdit()
self.lineEdit.setMinimumSize(QtCore.QSize(60, 60))
self.lineEdit.setMaximumSize(QtCore.QSize(60, 60))
self.lineEdit.setText(str(wert))
self.horizontalLayout.addWidget(self.lineEdit)
self.setLayout(self.horizontalLayout)
def getSlider(self):
return self.horizontalSlider
def getLineEdit(self):
return self.lineEdit
def getLabel(self):
return self.label
Mein Problem war nachher die Signale vom horizontalSlider zu connecten, da in der Liste ja nachher Objekte vom Typ SliderWidget stehen, ich also auf den Slider eines jeden Widgets zugreifen muss. Deswegen die drei Rückgabemethoden, die das jeweilige Objekt zurückgeben.
Das connecten sieht dann folgendermaßen aus
Code: Alles auswählen
self.sliderWidget = SliderWidget('test',1,self.scrollAreaWidgetContents)
slider = self.sliderWidget.getSlider()
self.connect(slider,QtCore.SIGNAL("valueChanged(int)"),self.sliderBewegt)
Nun hatte ich das Problem, dass ich ja in der Methode sliderBewegt() nichts mehr vom zugehörigen Widget weiß. Ich habe mir jetzt so beholfen, dass ich die Methode sender() und parentWidget() verwendet habe. Das sieht dann in der Testversion folgendermaßen aus
Code: Alles auswählen
def sliderBewegt(self,i):
print self.sender().parentWidget().getLabel().text(), self.sender().parentWidget().getSlider().value()
self.sender().parentWidget().getLineEdit().setText(str(i))
Wie gesagt, die Zeilen in sliderBewegt geben mir ein Gefühl, dass es auch einfacher geben muss, aber mir fehlt einfach die Idee, wie.
Wäre schön, wenn jemand die Zeit fände, mir einen Tipp zu geben.