На самом деле я выбрал только подкласс QTabWidget.
CheckBox добавляется при создании новой вкладки и сохраняется в списке для возврата его индекса.
Методы setCheckState / isChecked предназначены для управления состоянием каждого checkBox, указанного в его индексе вкладки.
Наконец, сигнал «stateChanged (int)» захватывается и передается с дополнительным параметром, указывающим индекс соответствующего checkBox.
class CheckableTabWidget(QtGui.QTabWidget):
checkBoxList = []
def addTab(self, widget, title):
QtGui.QTabWidget.addTab(self, widget, title)
checkBox = QtGui.QCheckBox()
self.checkBoxList.append(checkBox)
self.tabBar().setTabButton(self.tabBar().count()-1, QtGui.QTabBar.LeftSide, checkBox)
self.connect(checkBox, QtCore.SIGNAL('stateChanged(int)'), lambda checkState: self.__emitStateChanged(checkBox, checkState))
def isChecked(self, index):
return self.tabBar().tabButton(index, QtGui.QTabBar.LeftSide).checkState() != QtCore.Qt.Unchecked
def setCheckState(self, index, checkState):
self.tabBar().tabButton(index, QtGui.QTabBar.LeftSide).setCheckState(checkState)
def __emitStateChanged(self, checkBox, checkState):
index = self.checkBoxList.index(checkBox)
self.emit(QtCore.SIGNAL('stateChanged(int, int)'), index, checkState)
Возможно, это не идеальный способ сделать что-то, но, по крайней мере, он остается довольно простым и покрывает все мои потребности.