Python PyQt5树视图,包含多个列如何将信息放入其他列
我正在尝试在nPyQt5中创建一个树视图,我希望在树中有列表项以及数据类型和长度,树的父级将没有此信息。 我有树的工作,但一切都在一列中的树,我想添加信息到其他2列Python PyQt5树视图,包含多个列如何将信息放入其他列,python,python-3.x,treeview,pyqt5,Python,Python 3.x,Treeview,Pyqt5,我正在尝试在nPyQt5中创建一个树视图,我希望在树中有列表项以及数据类型和长度,树的父级将没有此信息。 我有树的工作,但一切都在一列中的树,我想添加信息到其他2列 import sys from PyQt5.QtWidgets import QDialog,QApplication,QFileDialog,QAbstractItemView from PyQt5.QtGui import QStandardItemModel,QStandardItem from PyQt5.QtCore im
import sys
from PyQt5.QtWidgets import QDialog,QApplication,QFileDialog,QAbstractItemView
from PyQt5.QtGui import QStandardItemModel,QStandardItem
from PyQt5.QtCore import Qt
from treeview import *
import lxml.etree as etree
features = {('POLYGON', 'SLPR'): [('ONE WAY', ['NO', 'YES'], 'List', 3), ('CLASS', ['INTERSTATE', 'PRIMARY', 'RESIDENTIAL', 'SECONDARY', 'SERVICE', 'STATE HWY', 'TERTIARY', 'TRACK', 'US HWY'], 'List', 11)], ('POINT', 'CALC FLD'): [('NAME', [], 'TEXT', '50'), ('SURFACE', ['BLACK TOP', 'BRICK', 'CALICHE', 'CALICHE AND GRAVEL', 'CINDER', 'CONCRETE', 'DIRT', 'GRASS', 'GRAVEL', 'LIMESTONE', 'OILED', 'PAVED ASPHALT', 'ROCK', 'SAND', 'SAND AND GRAVEL', 'SCORIA', 'SHELL', 'SHELL & OIL', 'SLAG'], 'List', 18)], ('POINT', 'RKDH'): [('TYPE', ['COUNTY', 'DO NOT USE', 'ENGINEERED', 'IMPROVED', 'PRIMITIVE', 'TEMPLATE', 'TEMPORARY ACCESS'], 'List', 16)]}
class Window(QDialog):
def __init__(self):
super().__init__()
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.ui.pushButtonFile.clicked.connect(self.dispFolder)
self.ui.pushButtonLoad.clicked.connect(self.loadXml)
self.show()
def dispFolder(self):
fname = QFileDialog.getOpenFileName(self,'Open File','/home')
if fname[0]:
self.ui.lineEditFile.setText(fname[0])
def loadXml(self):
print(features)
model = QStandardItemModel(0,3,self.ui.treeView)
model.setHeaderData(0,Qt.Horizontal,"CODE")
model.setHeaderData(1,Qt.Horizontal,"DATA TYPE")
model.setHeaderData(2,Qt.Horizontal,"LENGTH")
self.ui.treeView.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.treeView.setFirstColumnSpanned(i,self.ui.treeView.rootIndex(),True)
i+=1
if __name__ == "__main__":
app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
这是我的treeview.py,它有我在Designer中创建的ui
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 300)
self.pushButtonFile = QtWidgets.QPushButton(Dialog)
self.pushButtonFile.setGeometry(QtCore.QRect(310, 20, 75, 23))
self.pushButtonFile.setObjectName("pushButtonFile")
self.lineEditFile = QtWidgets.QLineEdit(Dialog)
self.lineEditFile.setGeometry(QtCore.QRect(70, 20, 231, 20))
self.lineEditFile.setObjectName("lineEditFile")
self.pushButtonLoad = QtWidgets.QPushButton(Dialog)
self.pushButtonLoad.setGeometry(QtCore.QRect(250, 250, 75, 23))
self.pushButtonLoad.setObjectName("pushButtonLoad")
self.treeView = QtWidgets.QTreeView(Dialog)
self.treeView.setGeometry(QtCore.QRect(70, 50, 256, 192))
self.treeView.setObjectName("treeView")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.pushButtonFile.setText(_translate("Dialog", "File"))
self.pushButtonLoad.setText(_translate("Dialog", "Load"))
因此,对于点,数据类型为双精度,长度为零,位置为列表数据类型,长度为字段长度
所有这些信息都在features dictionary中,这是我拼凑的xml转换的一部分。字典中的列表实际上是原始代码段中的一个xml元素。因为标准项模型是用3列实例化的,所以行可以附加一个或多个项 将填充所有3列,要填充父项的第二列,只需在模型中的所需索引处设置项
model.setItem(row,col,item)
您的意思是,对于根目录的每个子目录,都应该有数据“type”和count,而不是列表中的实际项目吗?
model.setItem(row,col,item)