Как установить ширину столбца в QTreeView? - PullRequest
12 голосов
/ 03 декабря 2011

Терпите меня, я все еще новичок в 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) расширит первый столбец, но, похоже, он не оказывает никакого влияния. Как правильно настроить ширину столбцов?

Ответы [ 2 ]

16 голосов
/ 03 декабря 2011

Когда вы звоните 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_())
9 голосов
/ 09 июня 2012
self.view.resizeColumnToContents(0)

Это гарантирует, что ширина и высота данного столбца будут соответствовать содержимому.

...