仅显示布尔值复选框

时间:2019-11-15 23:34:48

标签: python pyqt qcheckbox qstyleditemdelegate

我正在实现一个继承自QSyledItemDelegate的CheckBox,并将其放入QTableView中。

问题是我只想显示布尔值复选框,但同时显示复选框和“ true”或“ false”。

这是我代表的代码,标记为“ TODO:使布尔字符更优化”是我认为需要编辑实现的地方:

def createEditor(self, parent, option, index):
    """ Creates the widget used to change data from the model and can be
    reimplemented to customize editing behavior"""
    data = index.internalPointer()

    if type(data) == Property:
        if index.column() == 1:
            t = data.getType()
            if t == str:
                return QLineEdit(parent)
            elif t == int:
                return QSpinBox(parent)
            elif t == bool:
                # TODO: Make the bool character more optimal
                return QCheckBox(parent)
            elif t == float:
                return QDoubleSpinBox(parent)
            else:
                #TODO:Handle drop down menus later
                pass
    return QStyledItemDelegate.createEditor(self, parent, option, index)


def setEditorData(self, editor, index):
    """ Provides the widget with data to manipulate."""
    data = index.internalPointer()

    if type(data) == Property:
        value = data.getValue()
        if index.column() == 1:
            t = data.getType()
            if t == str:
                editor.setText(value)
            elif t == int:
                editor.setValue(value)
            elif t == bool:
                # TODO: Make the bool character more optimal
                editor.setChecked(value)
            elif t == float:
                editor.setValue(value)
            else:
                # TODO:Handle drop down menus later
                pass

def setModelData(self, editor, model, index):
    """ Returns updated data to the model"""
    data = index.internalPointer()

    if type(data) == Property:

        if index.column() == 1:
            t = data.getType()
            if t == str:
                data.setValue(editor.text())
            elif t == int:
                data.setValue(editor.value())
            elif t == bool:
                # TODO: Make the bool character more optimal
                data.setValue(editor.isChecked())
            elif t == float:
                data.setValue(editor.value())
            else:
                # TODO:Handle drop down menus later
                pass

0 个答案:

没有答案