PyQt 如何使用 QTreeView 设置表头标签
在定制 QTreeView
这个小部件时,我遇到了一个问题。这个小部件里的每个项目都是由不同的小部件组成的,比如 combo box
(下拉框)、line edit
(文本框)等等,它们都是排成一行的。但是我发现我无法自定义表头的标签(也就是列的名称)。如果是用 QTreeWidget()
的话,可以通过 setHeaderLabels([])
来设置...
import sys, os
from PyQt4 import QtCore,QtGui
class TreeWidgetsItems(QtGui.QTreeView):
def __init__(self):
super(TreeWidgetsItems, self).__init__()
self.itemModel = QtGui.QStandardItemModel(0, 2)
self.setModel(self.itemModel)
item0 = QtGui.QStandardItem('Item 0')
self.itemModel.setItem(0, 0, item0)
item0.setCheckable(True)
item1 = QtGui.QStandardItem('Item 1')
self.itemModel.setItem(0, 1, item1)
item2 = QtGui.QStandardItem('Item 2')
self.itemModel.setItem(0, 2, item2)
item3 = QtGui.QStandardItem('Item 3')
self.itemModel.setItem(0, 3, item3)
lineedit1 = QtGui.QLineEdit()
itemIndex1 = self.itemModel.index(0, 1, QtCore.QModelIndex())
self.setIndexWidget(itemIndex1, lineedit1)
self.combo2 = QtGui.QComboBox()
itemIndex2 = self.itemModel.index(0, 2, QtCore.QModelIndex())
self.setIndexWidget(itemIndex2, self.combo2)
for i in range(5):
self.combo2.addItem('Item'+str(i))
self.dateEdit = QtGui.QDateEdit()
self.dateEdit.setDateTime(QtCore.QDateTime.currentDateTime())
self.dateEdit.setMaximumDate(QtCore.QDate(7999, 12, 28))
self.dateEdit.setMaximumTime(QtCore.QTime(23, 59, 59))
self.dateEdit.setCalendarPopup(True)
itemIndex3 = self.itemModel.index(0, 3, QtCore.QModelIndex())
self.setIndexWidget(itemIndex3, self.dateEdit)
self.setColumnWidth(0, 60)
for i in range(1, 7):
self.setColumnWidth(i, 200)
self.show()
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = TreeWidgetsItems()
window.resize(960, 240)
sys.exit(app.exec_())
1 个回答
3
把你的 for i in range(1, 7):
循环改成这样:
for i in range(1, 7):
self.setColumnWidth(i, 200)
self.itemModel.setHeaderData(i, QtCore.Qt.Horizontal, 'Column {}'.format(i))
self.itemModel.setHeaderData(0, QtCore.Qt.Horizontal, 'Column {}'.format("0"))
最后那一行应该放在你的 for 循环外面。它是在设置你的第一个列标题(从0开始的索引)。其他的标题会在你从1到7的循环中逐个设置。
输出的效果是这样的: