【发布时间】:2021-05-08 12:44:44
【问题描述】:
注意:我是一个完全的初学者。
我正在使用 pandas 数据框来导入我从下表转换的 csv 文件。我需要将 csv 文件加载到 QTreeView 中,但无法这样做。
输出格式应为:
我将不得不在某个时候检索“比例类型”,所以我想以某种方式将它标记到该项目,但我不确定这是否可能。我尝试将我的数据转换为熊猫数据框并加载;使用 csv 直接加载数据;并没有运气将其转换为字典。
我可以将这些数据硬编码,但我更喜欢使用 csv,因为我以后可以轻松更改它。
目前使用:
model.setHeaderData(0,Qt.Horizontal,"Category")
model.setHeaderData(1,Qt.Horizontal,"Sub Category")
model.setHeaderData(2,Qt.Horizontal,"Test")
self.ui.tv.setModel(model)
self.SetContent(model)
def SetContent(self, model):
self.ui.tv.setModel(model)
i=0
for k,featuretype in features.items():
parent1 = QStandardItem('{}'.format(k[1]))
for item in featuretype:
child = QStandardItem(item[0])
if len(item[1])>0:
for listitem in item[1]:
gchild=QStandardItem(listitem)
child.appendRow(gchild)
parent1.appendRow(child)
model.setItem(i,0,parent1)
self.ui.tv.setFirstColumnSpanned(i,self.ui.tv.rootIndex(),True)
i+=1
这仅在值是硬键时有效,例如:
features = {('POLYGON', 'SLPR'): [('ONE WAY', ['NO', 'YES','maybe'], 'List', 3), ('CLASS', ['INTERSTATE', 'PRIMARY', 'RESIDENTIAL', 'SECONDARY', 'SERVICE', 'STATE HWY', 'TERTIARY', 'TRACK', 'US HWY'], 'List', 11)]
但它不适用于我从 csv 或数据框创建的字典对象,并且我得到“字符串索引超出范围错误”。
我还找到了这段代码,它会很棒。但它只给了我副本和父母。
reader = csv.reader(f)
for row in reader:
item = QTreeWidgetItem(self.ui.tv, row)
print(row)
【问题讨论】:
-
默认情况下,第二张图片中的布局是不可能的。可展开项目只能显示在第一列。在第二列中显示扩展器也需要自定义绘图(除其他外),这并非易事。只有三列会容易得多,类别和子类别嵌套在第一列中(即像典型的文件管理器)。
-
我将如何从 csv 、数据框或字典转换它?
-
如果可以接受将类别和子类别嵌套在第一列中,我将在明天的某个时候提供完整的答案。
标签: python dataframe csv pyqt5 qtreeview