请耐心等待,我对 QT 还是个新手,无法理解它是如何做事的。
我已经创建并填充了一个包含两列的 QTreeView:
class AppForm(QMainWindow):
def __init__(self, parent = None):
super(AppForm, self).__init__(parent)
self.model = QStandardItemModel()
self.view = QTreeView()
self.view.setColumnWidth(0, 800)
self.view.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.view.setModel(self.model)
self.setCentralWidget(self.view)
一切都很好,除了列非常窄。我希望 setColumnWidth(0, 800) 会加宽第一列,但它似乎没有任何效果。设置列宽的正确方法是什么?
最佳答案
当您调用 setColumnWidth
时,Qt 将执行以下操作:
self.view.header().resizeSection(column, width)
然后,当您调用 setModel
时,Qt 将(除其他事项外)执行以下操作:
self.view.header().setModel(model)
因此列宽确实得到设置 - 只是不在 TreeView 最终的模型上。
tl;dr
:设置模型后设置列宽。
编辑
这是一个基于您的示例的简单演示脚本:
from PyQt4 import QtGui, QtCore
class Window(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.model = QtGui.QStandardItemModel()
self.view = QtGui.QTreeView()
self.view.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.view.setModel(self.model)
self.setCentralWidget(self.view)
parent = self.model.invisibleRootItem()
for item in 'One Two Three Four'.split():
parent.appendRow([
QtGui.QStandardItem(item),
QtGui.QStandardItem(),
QtGui.QStandardItem(),
])
self.view.setColumnWidth(0, 800)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
关于python - 如何设置 QTreeView 的列宽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8364061/