【问题标题】:How do you set the column width on a QTreeView?QTreeView 如何设置列宽?
【发布时间】:2012-01-11 22:31:59
【问题描述】:

请耐心等待,我还是 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) 会加宽第一列,但它似乎没有任何效果。设置列宽的正确方法是什么?

【问题讨论】:

    标签: python user-interface pyqt pyqt4 qtreeview


    【解决方案1】:

    当您调用setColumnWidth 时,Qt 将执行以下操作:

    self.view.header().resizeSection(column, width)
    

    然后,当您调用setModel 时,Qt 将(除其他外)执行以下操作:

    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 下面,但它似乎仍然没有效果。是我还没有填充或者设置列数的问题吗?
    • @ashground。我在答案中添加了一个适合我的演示脚本。
    • 太棒了——我将 setColumnWidth 移到另一个函数中,以便在填充树后调用它。现在一切都按预期工作。感谢您的帮助!
    【解决方案2】:
    self.view.resizeColumnToContents(0)
    

    This 确保给定列的宽度和高度设置为与内容匹配。

    【讨论】:

    • QTreeView' 对象没有属性 'resizeColumnsToContents'
    • resizeColumnToContents(),而不是列
    猜你喜欢
    • 1970-01-01
    • 2011-01-10
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2013-02-19
    • 2014-09-06
    相关资源
    最近更新 更多