Python 如何在QTreeView上设置列宽?
请容忍我,我对QT还是个新手,我的大脑很难理解它是如何工作的 我创建并填充了一个QTreeView,其中包含两列:Python 如何在QTreeView上设置列宽?,python,pyqt,pyqt4,qtreeview,Python,Pyqt,Pyqt4,Qtreeview,请容忍我,我对QT还是个新手,我的大脑很难理解它是如何工作的 我创建并填充了一个QTreeView,其中包含两列: class AppForm(QMainWindow): def __init__(self, parent = None): super(AppForm, self).__init__(parent) self.model = QStandardItemModel() self.view = 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(0800)会加宽第一列,但它似乎没有任何效果。设置列宽的正确方法是什么?当您调用
setColumnWidth
时,Qt将执行以下等效操作:
self.view.header().resizeSection(column, width)
self.view.header().setModel(model)
然后,当您调用setModel
时,Qt将(除其他外)执行以下等效操作:
self.view.header().resizeSection(column, width)
self.view.header().setModel(model)
因此,列宽确实得到了设置,只是树视图最终的模型上没有设置列宽
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_())
确保给定列的宽度和高度设置为与内容匹配。我将setColumnWidth移到setModel下面,但它似乎仍然没有效果。问题是我还没有填充它或设置列的数量吗?@ashlead。我在我的答案中添加了一个演示脚本,对我来说很有用。太棒了——我将setColumnWidth移到了另一个函数中,这样在填充树之后就可以调用它了。现在一切正常。谢谢你的帮助!QTreeView对象没有属性“resizeColumnsToContents”resizeColumnsToContents(),而不是列