2011-12-02 28 views
9

Mang theo tôi, tôi vẫn còn mới với QT và đang gặp rắc rối khi gói não của tôi xung quanh nó hoạt động như thế nào.Làm thế nào để bạn thiết lập chiều rộng cột trên một QTreeView?

tôi đã tạo ra và dân cư một QTreeView với hai cột:

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) 

Tất cả mọi thứ của làm việc tuyệt vời, ngoại trừ các cột rất hẹp. Tôi hy vọng rằng setColumnWidth (0, 800) sẽ mở rộng cột đầu tiên, nhưng nó dường như không có bất kỳ hiệu ứng nào. Phương pháp thích hợp để thiết lập độ rộng cột là gì?

Trả lời

13

Khi bạn gọi setColumnWidth, Qt sẽ làm tương đương với:

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

Sau đó, khi bạn gọi setModel, Qt sẽ (trong số những thứ khác) làm tương đương với:

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

Vì vậy, chiều rộng cột không được đặt - chỉ cần không có trên mô hình chế độ xem dạng cây kết thúc bằng.

tl;dr: đặt chiều rộng cột sau bạn đặt mô hình.

EDIT

Dưới đây là một kịch bản giới thiệu đơn giản dựa trên ví dụ của bạn:

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

Tôi đã di chuyển setColumnWidth bên dưới setModel, nhưng nó vẫn không có vẻ có hiệu lực. Có phải vấn đề mà tôi chưa điền hoặc đặt số cột chưa? – ashground

+0

@ashground. Tôi đã thêm một kịch bản demo vào câu trả lời của tôi làm việc cho tôi. – ekhumoro

+0

Tuyệt vời - Tôi đã chuyển setColumnWidth thành một hàm khác để nó được gọi sau khi nó điền vào cây. Mọi thứ đang hoạt động như mong đợi. Cảm ơn bạn đã giúp đỡ! – ashground

9
self.view.resizeColumnsToContents() 

Điều này đảm bảo rằng columnwidths và chiều cao được thiết lập để phù hợp với nội dung của họ.

+0

Đối tượng QTreeView 'không có thuộc tính' resizeColumnsToContents ' – Sophus

+0

resizeColumnToContents(), không phải cột –

Các vấn đề liên quan