标题中带有CheckBox的QTabWidget

Jib*_*Jib 4 python checkbox qt4 pyqt4 qtabwidget

我想知道如何创建(使用PyQt4)一个派生的QTabWidget每个标题标题旁边的复选框?像这样:

Jib*_*Jib 8

实际上我只选择了子类QTabWidget.
在创建新选项卡时添加checkBox并将其保存到列表中以便返回其索引.
setCheckState/isChecked方法用于控制其tab选项卡指定的每个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)
Run Code Online (Sandbox Code Playgroud)

这可能不是完美的做事方式,但至少它仍然非常简单,涵盖了我的所有需求.