从ListWidgetItem PyQt4获取所有数据

时间:2016-03-24 11:30:34

标签: python pyqt pyqt4

请看一下图片。底部小部件是一个列表小部件。它的工作原理如下。当您单击插入按钮时,将在底部ListWidget中动态添加新的QListWidgetItem。现在小部件中有三个项目。每个项目可能包含CheckBoxes,ComboBoxes,lineEdit等..

enter image description here

我需要从listWidgetItem获取所有这些数据。不幸的是,CREATE OR REPLACE FUNCTION INSERT_DATA RETURN VARCHAR2 AS BEGIN INSERT INTO T_ITEMS (cd_1,cd_2,cd_3) (SELECT cd_1,cd_2,cd_3 FROM REC_ITEMS); COMMIT; RETURN 'Return 1 if All is OK else return 0'; END; 是我可以从项目中检索数据的唯一方法。 然后该怎么做才能获得所有这些数据。

2 个答案:

答案 0 :(得分:1)

你不应该(通常)使用QListItemWidget,而是使用正确的QAbstractItemModel子类。有了它,您可以使用您想要的任何数据来支持listwidget,并访问该数据。

有一个实用类可用,已经被称为QStandardItemModel,它继承自QAbstractItemModel,应该让你快速入门。

Custom QStandardItemModel with custom data method

答案 1 :(得分:1)

您可以在QListWidgetItem上存储多个任意数据(实际上,所有小部件都支持此功能)。您需要为数据定义自定义角色。

Data1Role = QtCore.Qt.UserRole + 1
Data2Role = QtCore.Qt.UserRole + 2

item = QtGui.QListWidgetItem()
item.setData(Data1Role, 'Any data')
item.setData(Data2Role, 42)

print item.data(Data1Role)
# "Any data"

但是,此数据不会显示在QListWidgetItem的任何位置。默认情况下显示的唯一数据是QtCore.Qt.DisplayRole上的数据集(text()setText()使用的数据集。)

最好使用QTreeWidget,它支持多列(针对多个数据)并创建QTreeWidgetItem的自定义子类。如果您希望用户能够编辑表格中的数据,您还需要创建QItemDelegate以创建QLineEditsQComboBoxes进行编辑数据。