2016-04-10 32 views
1
上のユーザーデータを渡す

私は PyQtはをQbuttonGroupは:buttonClicked

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

と私はユーザーデータtuple_pairにアクセスすると、対応するボタンは、ボタンのグループでクリックbuttonclickedにQbuttonGroup

を継承し、私自身のクラスを定義している

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

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

この機能は、クリックされたボタンを受け取りますが、コールバックのユーザーデータにアクセスする方法がわかりません。

答えて

1

すべてのボタンは、あなたは彼らがに追加されたことを何でもグループ(もしあれば)への参照を取得することができますgroup()方法を持っています。

button_group.buttonClicked.connect(self.labelchanged) 

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

そして、あなたはそれがデフォルトの過負荷であるので、信号を接続する場合QAbstractButtonをspecifiyする必要がいけないことに注意してください:だからあなたのコードは、単純にすることができます。

+0

ありがとう:)それは動作します –

0

これはいくつかの方法で実行できます。

サブクラスでbuttonClickedシグナルを捕まえて、tuple_pairを含む独自のシグナルを発することができます。

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) 

それからちょうど他のオプションは、内からボタングループへの参照を取得するために、既存のクラス、シグナルとスロットを使用し、.sender()方法を使用することです

button_group.buttonClickedWithData.connect(self.labelchanged) 

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

その新しい信号に接続しますスロットメソッド。

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

ありがとうございました。少し複雑に思えます。 @.ghumoroによって提案されているように、button.group()。tuple_pairを呼び出すほうがずっと簡単です –