1

QbuttonGroup を継承する独自のクラスを定義しました

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

そして、buttonclicked で、ユーザー データ tuple_pair と、ボタン グループでクリックされた対応するボタンにアクセスしたい

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

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

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

4

2 に答える 2

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)

次に、その新しい信号に接続するだけです

button_group.buttonClickedWithData.connect(self.labelchanged)

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

もう 1 つのオプションは、既存のクラス、シグナル、およびスロットを使用し、.sender()メソッドを使用してスロット メソッド内からボタン グループへの参照を取得することです。

@QtCore.pyqtSlot(QtGui.QAbstractButton)
def labelchanged(self, button):
    btngroup = self.sender()
    print btngroup.tuple_pair
    print button.text()
于 2016-04-10T07:02:49.700 に答える