python - 如何在 QTableWidget 中将 bool 项显示为复选框?

标签 python qtablewidget pyside2

enter image description here

我是 Pyside 的新手,我想在表格小部件中将 bool 数据类型显示为复选框

我尝试使用 QTableWidgetItem 重建数据,但它不起作用(请参阅注释掉的部分)

rows = [('Test1123456789', False), ('Test2123456789', False), ('Test3123456789', True), ('Test4123456789', True)]

    #rows2 = []

    # self.checkbox2 = QtWidgets.QTableWidgetItem()
    # self.checkbox2.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)

    # #for i in rows:
    #   #print(i)
    #   #if i[1] == False:
    #       #self.newi = self.checkbox2
    #       self.newi = self.newi.setCheckState(QtCore.Qt.Unchecked)
    #       rows2.append((i[0],self.newi))
    #   else:
    #       self.newi = self.checkbox2
    #       self.newi = self.newi.setCheckState(QtCore.Qt.Checked)
    #       rows2.append((i[0],self.newi))

    for row_number, row_data in enumerate(rows):
        self.classestable.insertRow(row_number)
        for colum_number, data in enumerate(row_data):
            colum_number = colum_number +1
            self.checkbox = QtWidgets.QTableWidgetItem()
            self.checkbox.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
            self.checkbox.setCheckState(QtCore.Qt.Unchecked)
            self.classestable.setItem(row_number,0,self.checkbox)
            self.classestable.setItem(row_number,colum_number,QtWidgets.QTableWidgetItem(str(data)))
    self.classestable.resizeColumnsToContents()

我想让它返回到表格中

CheckBox(Unchecked), Test1123456789, CheckBox(Unchecked)
CheckBox(Unchecked), Test2123456789, CheckBox(Unchecked)
CheckBox(Unchecked), Test3123456789, CheckBox(Checked)
CheckBox(Unchecked), Test4123456789, CheckBox(Checked)

最佳答案

与第1栏的情况类似,但必须根据情况使用Qt::CheckedQt::UnChecked

from PySide2 import QtCore, QtGui, QtWidgets

rows = [('Test1123456789', False), ('Test2123456789', False), ('Test3123456789', True), ('Test4123456789', True)]

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.classestable = QtWidgets.QTableWidget(0, 3)
        self.setCentralWidget(self.classestable)

        for r, (text, state) in enumerate(rows):
            it_1 = QtWidgets.QTableWidgetItem()
            it_1.setFlags(it_1.flags() | QtCore.Qt.ItemIsUserCheckable)
            it_1.setCheckState(QtCore.Qt.Unchecked)
            it_2 = QtWidgets.QTableWidgetItem(text)
            it_3 = QtWidgets.QTableWidgetItem()
            it_3.setFlags(it_3.flags() | QtCore.Qt.ItemIsUserCheckable)
            it_3.setCheckState(QtCore.Qt.Checked if state else QtCore.Qt.Unchecked)
            self.classestable.insertRow(self.classestable.rowCount())
            for c, item in enumerate([it_1, it_2, it_3]):
                self.classestable.setItem(r, c, item)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

关于python - 如何在 QTableWidget 中将 bool 项显示为复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54314745/

相关文章:

python - 在matplotlib中自动缩写长度字符串

python - 段错误: 11 on a QMainWindow exit button with pyqt5 on OSX

Qt 小部件调整为宽度 = 256,而它不应该

python - QTableWidget 动态行 w/QComboBox

python - 如何使用 openpyxl 将数据透视表值(列)从 pandas 写入 excel?

Python:有策略地遍历 0-9 的十位数字

c++ - QTableWidget 左键单击 CustomContextMenu

python - 如何在QTest中的QGraphicsWidget上生成鼠标点击?

python - PySide2 + QML : QApplication: invalid style override passed, 忽略它

python - QPropertyAnimation 不适用于窗口不透明度