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