2011-12-02 24 views
9

Niedźwiedź ze mną, wciąż jestem nowy w QT i mam problem z zawijaniem mózgu, jak to działa.Jak ustawić szerokość kolumny w QTreeView?

Utworzyłem i zaludnionych do QTreeView z dwóch kolumn:

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) 

Wszystko działa doskonale, z wyjątkiem kolumny są bardzo wąskie. Miałem nadzieję, że setColumnWidth (0, 800) rozszerzy pierwszą kolumnę, ale wydaje się, że nie ma ona żadnego efektu. Jaka jest właściwa metoda ustawiania szerokości kolumn?

Odpowiedz

13

Po wywołaniu setColumnWidth Qt zrobi równowartość:

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

Wtedy, kiedy zadzwonić setModel Qt będzie (między innymi) zrobić równowartość:

self.view.header().setModel(model) 

So szerokość kolumny jest ustawiana na - po prostu nie na modelu, na którym kończy się widok drzewa.

tl;dr: ustaw szerokość kolumny po ustawieniu modelu przez.

EDIT

Oto prosty skrypt demo oparte na przykład:

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_()) 
+0

Przesunąłem setColumnWidth poniżej setModel, ale nadal nie wydaje się, aby efekt. Czy problem nie został przeze mnie zapełniony lub nie ustawiono jeszcze kolumny? – ashground

+0

@ashground. Dodałem skrypt demo do mojej odpowiedzi, która działa dla mnie. – ekhumoro

+0

Awesome - Przeniosłem setColumnWidth do innej funkcji, tak aby została wywołana po zapełnieniu drzewa. Wszystko działa zgodnie z oczekiwaniami. Dzięki za pomoc! – ashground

9
self.view.resizeColumnsToContents() 

Daje to pewność, że columnwidths i wysokości są ustawione, aby dopasować swoją zawartość.

+0

Obiekt QTreeView 'nie ma atrybutu' resizeColumnsToContents ' – Sophus

+0

resizeColumnToContents(), a nie kolumny –

Powiązane problemy