2011-12-02 18 views
9

私と一緒にいて、私はまだQTの新人ですし、私の頭脳を物事の仕方の周りにラップするのに問題があります。QTreeViewの列幅をどのように設定しますか?

私は2つのカラムを持つ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)が最初の列を広げることを望みましたが、何の効果もないようです。列幅を設定する適切な方法は何ですか?あなたがsetColumnWidthを呼び出すと

答えて

13

は、Qtは相当行います:だから

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

:あなたはsetModelを呼び出すときに、次に

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

を、Qtは(とりわけ)と同等のものを行います列幅になります。モデルには表示されません。

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

setColumnWidthをsetModelより下に移動しましたが、それでも効果がないようです。私はそれを設定しなかったり、列の量をまだ設定していないという問題はありますか? – ashground

+0

@ashground。私は私のために働く私の答えにデモスクリプトを追加しました。 – ekhumoro

+0

恐ろしい - 私は別の関数にsetColumnWidthを移動して、ツリーにデータを入力した後に呼び出されるようにしました。すべてが期待どおりに機能しています。ご協力いただきありがとうございます! – ashground

9
self.view.resizeColumnsToContents() 

EDIT

はここにあなたの例に基づいて簡単なデモスクリプトです。

+0

QTreeViewのオブジェクトには属性がありません 'resizeColumnsToContents' – Sophus

+0

resizeColumnToContents()ではなく、列 –

関連する問題