2016-04-10 7 views
1

Ich habe meine eigene Klasse definiert, die QbuttonGrouppyqt QbuttonGroup: Übergeben von Benutzerdaten auf ButtonClicked

class TupleButtonGroup(QtGui.QButtonGroup): 
    def __init__(self,parent, tuple_pair): 
     super(TupleButtonGroup, self).__init__(parent) 
     self.tuple_pair = tuple_pair 

Und auf ButtonClicked Ich möchte den Zugriff auf die Benutzerdaten tuple_pair und entsprechende Schaltfläche geklickt in der Knopfgruppe erbt

button_group.buttonClicked[QtGui.QAbstractButton].connect(self.labelchanged) 

def labelchanged(self, button): 
    print button.text() 

die Funktion empfängt die Schaltfläche geklickt, aber ich weiß nicht, wie die Benutzerdaten in der Callback-

Antwort

1

Alle Tasten haben eine group() Methode, die Sie einen Verweis auf was auch immer Gruppe (falls vorhanden) erhalten können, dass sie hinzugefügt wurden. So können Sie den Code einfach sein:

button_group.buttonClicked.connect(self.labelchanged) 

def labelchanged(self, button): 
    print button.text() 
    print button.group().tuple_pair 

Und beachten Sie, dass Sie nicht brauchen, QAbstractButton specifiy wenn das Signal anschließen, denn das ist die Überlastung Verzug ist.

+0

Danke :) es funktioniert –

0

zugreifen Sie es ein paar Möglichkeiten tun können.

Sie könnten das Signal buttonClicked in Ihrer Unterklasse abfangen und Ihr eigenes Signal ausgeben, das die tuple_pair enthält.

class TupleButtonGroup(QtGui.QButtonGroup): 
    buttonClickedWithData = QtCore.pyqtSignal(tuple, QtGui.QAbstractButton) 

    def __init__(self,parent, tuple_pair): 
     super(TupleButtonGroup, self).__init__(parent) 
     self.tuple_pair = tuple_pair 
     self.buttonClicked[QtGui.QAbstractButton].connect(self.on_buttonClicked) 

    @QtCore.pyqtSlot(QtGui.QAbstractButton) 
    def on_buttonClicked(self, button): 
     self.buttonClickedWithData.emit(self.tuple_pair, button) 

Dann einfach auf das neue Signal

button_group.buttonClickedWithData.connect(self.labelchanged) 

@QtCore.pyqtSlot(tuple, QtGui.QAbstractButton) 
def labelchanged(self, tuple_pair, button): 
    print tuple_pair 
    print button.text() 

Die andere Option verbinden ist Ihre vorhandene Klasse, Signale und Slots zu verwenden, und verwenden Sie die .sender() Methode einen Verweis auf die Schaltfläche Gruppe von innen heraus zu bekommen die Slot-Methode.

@QtCore.pyqtSlot(QtGui.QAbstractButton) 
def labelchanged(self, button): 
    btngroup = self.sender() 
    print btngroup.tuple_pair 
    print button.text() 
+0

Danke. scheint etwas komplizierter zu sein. Aufruf der button.group(). Tuple_pair scheint viel einfacher als von @ekhumoro empfohlen –