2011-12-02 13 views
9

मेरे साथ भालू, मैं अभी भी क्यूटी के लिए नया हूं और मेरे दिमाग को लपेटने में परेशानी हो रही है कि यह चीजें कैसे करता है।आप QTreeView पर कॉलम चौड़ाई कैसे सेट करते हैं?

मैं बनाया है और दो स्तंभों के साथ एक 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) 

सब कुछ, महान काम कर को छोड़कर कॉलम अत्यंत संकीर्ण कर रहे हैं। मुझे आशा थी कि सेट कॉलमविड्थ (0, 800) पहले कॉलम को चौड़ा कर देगा, लेकिन ऐसा कोई प्रभाव नहीं प्रतीत होता है। कॉलम चौड़ाई निर्धारित करने के लिए उचित विधि क्या है?

उत्तर

13

जब आप setColumnWidth फोन, क्यूटी के बराबर करना होगा:

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

तो:

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

फिर, जब आप setModel फोन, क्यूटी (अन्य बातों के साथ) के बराबर हो जाएगा कॉलम चौड़ाई सेट प्राप्त करें - बस पेड़ दृश्य के साथ मॉडल पर नहीं है।

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

मैं setModel नीचे setColumnWidth ले जाया गया, लेकिन यह अभी भी एक प्रभाव होने होने के लिए प्रतीत नहीं होता। क्या समस्या है कि मैंने इसे पॉप्युलेट नहीं किया है या अभी तक कॉलम की मात्रा निर्धारित की है? – ashground

+0

@ashground। मैंने अपने उत्तर में एक डेमो स्क्रिप्ट जोड़ दी है जो मेरे लिए काम करती है। – ekhumoro

+0

बहुत बढ़िया - मैंने सेट को कॉलमविड्थ को एक अलग फ़ंक्शन में ले जाया ताकि इसे पेड़ को पॉप्युलेट करने के बाद बुलाया जा सके। सब कुछ अब उम्मीद के रूप में काम कर रहा है। आपकी सहायताके लिए धन्यवाद! – ashground

9
self.view.resizeColumnsToContents() 

यह सुनिश्चित करें कि columnwidths और ऊंचाइयों उनकी सामग्री से मेल करने के लिए सेट कर रहे हैं बनाता है।

+0

QTreeView 'ऑब्जेक्ट में कोई विशेषता नहीं है' आकार बदलें कॉलम ट्यूटेंट्स ' – Sophus

+0

आकार बदलें कॉलमटोकेंट्स(), कॉलम नहीं –

संबंधित मुद्दे