2011-12-02 22 views
9

Orso con me, sono ancora nuovo a QT e sto avendo problemi a sistemare il mio cervello su come funziona.Come si imposta la larghezza della colonna su un QTreeView?

ho creato e popolato un QTreeView con due colonne:

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) 

tutto funziona grande, tranne che le colonne sono estremamente stretti. Speravo che setColumnWidth (0, 800) allargasse la prima colonna, ma non sembra avere alcun effetto. Qual è il metodo corretto per impostare le larghezze delle colonne?

risposta

13

Quando si chiama setColumnWidth, Qt farà l'equivalente di:

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

Poi, quando si chiama setModel, Qt sarà (tra le altre cose) fare l'equivalente di:

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

Così la larghezza della colonna è impostata su - non solo sul modello con cui viene visualizzata la vista ad albero.

tl;dr: impostare la larghezza della colonna dopo si imposta il modello.

EDIT

Ecco un semplice script demo basata sul vostro esempio:

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

Ho spostato setColumnWidth sotto setModel, ma non sembra che stia producendo alcun effetto. Il problema è che non l'ho popolato o non ho ancora impostato la quantità di colonne? – ashground

+0

@ashground. Ho aggiunto uno script demo alla mia risposta che funziona per me. – ekhumoro

+0

Impressionante: ho spostato setColumnWidth in una funzione diversa in modo che venga chiamata dopo aver popolato l'albero. Tutto funziona come previsto ora. Grazie per l'aiuto! – ashground

9
self.view.resizeColumnsToContents() 

Questo assicura che ColumnWidths e le altezze sono impostati per abbinare il loro contenuto.

+0

L'oggetto QTreeView 'non ha attributo' resizeColumnsToContents ' – Sophus

+0

resizeColumnToContents(), non Colonne –

Problemi correlati