ich habe eine Widget-Klasse für PyQt4 geschrieben, die mehrere QPushButtons mit Checkable=True tabellarisch angeordnet erzeugt. Dabei habe ich der Einfachheit halber im connect, das das toggeled()-Signal vom Button mit einer Funktion in der Klasse verbindet, eine lambda-Funktion benutzt, damit ich QPushButton nicht ableiten muss um die Koordinaten des angeklickten Buttons zu übermitteln.
Seltsamerweise habe ich beim Testlauf mit einer 5x5-Matrix immer die Ausgabe
Code: Alles auswählen
TOGGLED: 4 4 True
Ich kann mir das Ergebnis einfach nicht erklären, es wird ja für jeden Button eine eigene Lambda-Funktion erzeugt, die auch andere Koordinaten enthält, trotzdem erzeugt jeder Button die gleiche Ausgabe.
Hat hier jemand eine Idee, woran das liegen könnte?
Code: Alles auswählen
class Widget (QtGui.QWidget):
def __init__(self, width, height, parent=None):
super(Widget, self).__init__(parent)
layout = QtGui.QGridLayout(self)
widgets = []
for x in xrange(width):
xlist = []
for y in xrange(height):
obj = QtGui.QPushButton('%i,%i'%(x,y), self)
self.connect(obj, SIGNAL('toggled(bool)'), lambda checked: self._toggled(x,y,checked))
layout.addWidget(obj, y, x)
obj.setCheckable(True)
xlist.append( obj )
widgets.append(xlist)
def _toggled(self, x, y, checked):
print 'TOGGLED:', x,y,checked