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

1

所有按钮都有一个group()方法,允许您获取对它们已添加到的任何组(如果有)的引用。所以你的代码可以简单地是:

button_group.buttonClicked.connect(self.labelchanged)

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

请注意,连接信号时不需要指定QAbstractButton,因为这是默认的重载。

于 2016-04-10T17:32:43.613 回答
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()

另一种选择是使用现有的类、信号和插槽,并使用该.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 回答