2016-04-10 45 views
1
用戶數據

我定義我自己的類繼承QbuttonGroupPyQt的QbuttonGroup:薪火buttonClicked

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() 

該功能收到點擊按鈕,但我不知道如何訪問回撥中的用戶數據。

回答

1

所有按鈕有一個group()方法,它允許你去任何組(如果有的話),他們已被添加到一個參考。所以,你的代碼可以簡單地是:

button_group.buttonClicked.connect(self.labelchanged) 

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

而且請注意,你不需要specifiy QAbstractButton連接信號時,因爲這是默認的過載。

+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) 

然後,只需連接到新的信號

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() 
+0

謝謝。似乎稍微複雜一點。調用button.group()。tuple_pair看起來好像更容易@ekhumoro –