使用setflags()将几个复选框添加到QListWidgetItem

时间:2013-08-24 17:15:15

标签: python qt checkbox pyqt pyqt4

我正在使用Python3.3和PyQt4。我想为qtlistwidget中的项添加几个复选框。我能够使用以下代码添加一个:

item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
item.setCheckState(QtCore.Qt.Unchecked)

但是我无法在这个项目中添加更多内容,我尝试使用类似的内容:

item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsUserCheckable)

item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsUserCheckable)

但两者都不起作用。有没有人知道是否可以添加更多复选框,或者它是不是我可以解决这个问题。非常感谢!

1 个答案:

答案 0 :(得分:1)

QListWidgetItem没有以这种方式使用。无论您设置QtCore.Qt.ItemIsUserCheckable标志多少次,每个项目都会显示一个复选框。如果您需要在同一行显示多个复选框QTableWidget,那么您可能正在寻找:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

#---------
# IMPORT
#---------
from PyQt4 import QtGui, QtCore

#---------
# MAIN
#---------
class MyWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)

        numberRows    = 1
        numberColumns = 2

        self.tableWidget = QtGui.QTableWidget(self)
        self.tableWidget.setRowCount(numberRows)
        self.tableWidget.setColumnCount(numberColumns)

        for rowNumber in range(numberRows):
            for columnNumber in range(numberColumns):    
                item = QtGui.QTableWidgetItem("item {0} {1}".format(rowNumber, columnNumber))
                item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
                item.setCheckState(QtCore.Qt.Unchecked)

                self.tableWidget.setItem(rowNumber, columnNumber, item)

        self.layoutVertical = QtGui.QVBoxLayout(self)
        self.layoutVertical.addWidget(self.tableWidget)

if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('MyWindow')

    main = MyWindow()
    main.resize(333, 111)
    main.show()

    sys.exit(app.exec_())