pyqt QbuttonGroup:在 buttonClicked 上传递用户数据
pyqt QbuttonGroup: Passing user data on buttonClicked
我已经定义了我自己的 class 继承了 QbuttonGroup
class TupleButtonGroup(QtGui.QButtonGroup):
def __init__(self,parent, tuple_pair):
super(TupleButtonGroup, self).__init__(parent)
self.tuple_pair = tuple_pair
在单击按钮时我想访问用户数据 tuple_pair 并在按钮组中单击相应的按钮
button_group.buttonClicked[QtGui.QAbstractButton].connect(self.labelchanged)
def labelchanged(self, button):
print button.text()
该函数接收到点击的按钮,但我不知道如何在回调中访问用户数据
您可以通过几种方式完成。
您可以在您的 subclass 中捕获 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()
另一种选择是使用现有的 class、信号和插槽,并使用 .sender()
方法从插槽方法中获取对按钮组的引用。
@QtCore.pyqtSlot(QtGui.QAbstractButton)
def labelchanged(self, button):
btngroup = self.sender()
print btngroup.tuple_pair
print button.text()
所有按钮都有一个 group() 方法,允许您获取对它们已添加到的任何组(如果有)的引用。所以你的代码可以简单地是:
button_group.buttonClicked.connect(self.labelchanged)
def labelchanged(self, button):
print button.text()
print button.group().tuple_pair
请注意,连接信号时不需要指定 QAbstractButton
,因为这是默认的过载。
我已经定义了我自己的 class 继承了 QbuttonGroup
class TupleButtonGroup(QtGui.QButtonGroup):
def __init__(self,parent, tuple_pair):
super(TupleButtonGroup, self).__init__(parent)
self.tuple_pair = tuple_pair
在单击按钮时我想访问用户数据 tuple_pair 并在按钮组中单击相应的按钮
button_group.buttonClicked[QtGui.QAbstractButton].connect(self.labelchanged)
def labelchanged(self, button):
print button.text()
该函数接收到点击的按钮,但我不知道如何在回调中访问用户数据
您可以通过几种方式完成。
您可以在您的 subclass 中捕获 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()
另一种选择是使用现有的 class、信号和插槽,并使用 .sender()
方法从插槽方法中获取对按钮组的引用。
@QtCore.pyqtSlot(QtGui.QAbstractButton)
def labelchanged(self, button):
btngroup = self.sender()
print btngroup.tuple_pair
print button.text()
所有按钮都有一个 group() 方法,允许您获取对它们已添加到的任何组(如果有)的引用。所以你的代码可以简单地是:
button_group.buttonClicked.connect(self.labelchanged)
def labelchanged(self, button):
print button.text()
print button.group().tuple_pair
请注意,连接信号时不需要指定 QAbstractButton
,因为这是默认的过载。