Mehrere selbsterstellte Widgets in GUI einbinden
Verfasst: Mittwoch 9. März 2011, 10:31
Hallo,
ich bin gerade dabei ein GUI mit selbsterstellten Widgets zu erstellen. Dazu habe ich 4 LED und 4 Checkboxen in einem GridLayout zusammengefasst. Zusätzlich habe ich noch ein Signal im Widget eingeführt, dass bei Benutzung einer Checkbox eine Funktion im GUI ausführt.

Im Gui steht:
Nun möchte ich dieses Widget bis zu 60mal auf einer GUI benutzten. Gibt es da einen einfachen Weg, ohne das Widget 60 mal zu definieren. Da ich von dem Widget den Zustand der Checkboxen und die ID per Signal erhalt benötige ich eigentlich nur eine Schleife in der ich das Widget 60mal auf das GUI platziere.
Definiere ich das Widget nur einmal und lasse es durch eine Schleife platzieren, bekomme ich nur vom letzten Widget die Signal, da ich die vorhergehenden überschreibe.
Danke im Voraus
Markus
ich bin gerade dabei ein GUI mit selbsterstellten Widgets zu erstellen. Dazu habe ich 4 LED und 4 Checkboxen in einem GridLayout zusammengefasst. Zusätzlich habe ich noch ein Signal im Widget eingeführt, dass bei Benutzung einer Checkbox eine Funktion im GUI ausführt.

Code: Alles auswählen
from python_lib.ledwidget import LED
from PySide import QtGui, QtCore
class MYLEDS(QtGui.QWidget):
outchangedSignal = QtCore.Signal(int)
def __init__(self, parent):
super(MYLEDS, self).__init__(parent)
self.iaddr = 0
self.initUI()
def initUI(self):
self.led1 = LED(self)
self.led2 = LED(self)
self.led3 = LED(self)
self.led4 = LED(self)
self.addr = QtGui.QLabel(str(self.iaddr))
self.o3 = QtGui.QCheckBox('')
self.o2 = QtGui.QCheckBox('')
self.o1 = QtGui.QCheckBox('')
self.o0 = QtGui.QCheckBox('')
hbox = QtGui.QGridLayout(self)
hbox.addWidget(self.addr, 0, 0)
hbox.addWidget(self.led1, 0, 1)
hbox.addWidget(self.led2, 0, 2)
hbox.addWidget(self.led3, 0, 3)
hbox.addWidget(self.led4, 0, 4)
hbox.addWidget(self.o3 , 0, 5)
hbox.addWidget(self.o2 , 0, 6)
hbox.addWidget(self.o1 , 0, 7)
hbox.addWidget(self.o0 , 0, 8)
QtCore.QObject.connect(self.o3, QtCore.SIGNAL("stateChanged(int)"), self.output_changed)
QtCore.QObject.connect(self.o2, QtCore.SIGNAL("stateChanged(int)"), self.output_changed)
QtCore.QObject.connect(self.o1, QtCore.SIGNAL("stateChanged(int)"), self.output_changed)
QtCore.QObject.connect(self.o0, QtCore.SIGNAL("stateChanged(int)"), self.output_changed)
def setAddr(self, addr):
self.iaddr = addr
self.addr.setText(str(self.iaddr))
def output_changed(self):
out0 = int(self.o0.checkState())
out1 = int(self.o1.checkState())
out2 = int(self.o2.checkState())
out3 = int(self.o3.checkState())
self.outchangedSignal.emit(self.iaddr)
def input_changed(self, state):
pass
Code: Alles auswählen
for i in range(15):
widget = myleds.MYLEDS(self)
widget.setAddr(i)
self.ui.testLayout.addWidget(widget)
QtCore.QObject.connect(widget, QtCore.SIGNAL('outchangedSignal(int)'), self.test)
Definiere ich das Widget nur einmal und lasse es durch eine Schleife platzieren, bekomme ich nur vom letzten Widget die Signal, da ich die vorhergehenden überschreibe.
Danke im Voraus
Markus