2010-07-04 18 views
7

için en büyük sütun genişliğini üstbilgi genişliğine ayarlayın. PyQt4'teki QTableWidget bileşeniyle çalışıyorum ve ilgili başlık uzunluklarına göre doğru boyutta sütunlar elde edemiyorum.PyQt4 QTableWidget

İşte tablo düzeni (besbelli, sans borular) gibi görünmelidir ne:

Index | Long_Header | Longer_Header 
1  | 102402  | 100 
2  | 123123  | 2 
3  | 454689  | 18 

ben çalışıyorum kod şöyle görünür:

import sys 
from PyQt4.QtCore import QStringList, QString 
from PyQt4.QtGui import QApplication, QMainWindow, QSizePolicy 
from PyQt4.QtGui import QTableWidget, QTableWidgetItem 

def createTable(): 
    table = QTableWidget(5, 3) 
    table.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) 

    headers = QStringList() 
    headers.append(QString("Index")) 
    headers.append(QString("Long_Header")) 
    headers.append(QString("Longer_Header")) 

    table.setHorizontalHeaderLabels(headers) 
    table.horizontalHeader().setStretchLastSection(True) 

    # ignore crappy names -- this is just an example :) 
    cell1 = QTableWidgetItem(QString("1")) 
    cell2 = QTableWidgetItem(QString("102402")) 
    cell3 = QTableWidgetItem(QString("100")) 

    cell4 = QTableWidgetItem(QString("2")) 
    cell5 = QTableWidgetItem(QString("123123")) 
    cell6 = QTableWidgetItem(QString("2")) 

    cell7 = QTableWidgetItem(QString("3")) 
    cell8 = QTableWidgetItem(QString("454689")) 
    cell9 = QTableWidgetItem(QString("18")) 

    table.setItem(0, 0, cell1) 
    table.setItem(0, 1, cell2) 
    table.setItem(0, 2, cell3) 
    table.setItem(1, 0, cell4) 
    table.setItem(1, 1, cell5) 
    table.setItem(1, 2, cell6) 
    table.setItem(2, 0, cell7) 
    table.setItem(2, 1, cell8) 
    table.setItem(2, 2, cell9) 

    return table 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    mainW = QMainWindow() 

    mainW.setMinimumWidth(300) 
    mainW.setCentralWidget(createTable()) 

    mainW.show() 

    app.exec_() 

uygulama çalıştırır, Diğer sütunlar biraz sıkıştırılırken ilk sütun oldukça geniştir.

Tablonun, veriden ziyade başlık genişliğine göre boyutlandırılması için bir yol var mı? Daha da iyisi, her bir sütun genişliğini, veri ve başlık değerlerinin maksimum genişliği olacak şekilde zorlamak için bir yol var mı?

Güncelleme: Ben masaya resizeColumnsToContents() arama denedim ancak görünüm korkunç ezilmiş olur:

Python Table http://img514.imageshack.us/img514/8633/tablef.png

** Update2 **: gayet sürece denir olarak resizeColumnsToContents() eserleri'dan sonra tüm hücreler ve başlıklar tabloya eklenmiştir.

cevap

8
table.resizeColumnsToContents() 

bu özel örnek vermek gerekirse hile yapmak gerekir.

Henüz yapmadıysanız (belirli bir işlevi ararken kullanışlıdır) PyQt documentation'u işaretlediğinizden emin olun.

+0

Yanıt için teşekkürler, ancak zaten resizeColumnsToContents() yöntemini denedim. Sütunları veriye yeniden boyutlandırır ve üstbilgiler okunamaz hale gelir. Belgelerin mevcut olması (sürekli kullanıyorum), ancak bu sıkıntı sorununa bir çözüm bulamıyorum. – bedwyr

+0

@bedwyr: Belki de sorun başka bir yerde tetikleniyor (belki de mi? (Tasarımcı) dosyasındaki özellikler mi? Sorunu burada yeniden oluşturamıyorum (PyQt 4.5.4 iirc, Mac). Örnek kodunuz (basit 'table.resizeColumnsToContents()' ile birlikte) şu şekildedir: http://img210.imageshack.us/img210/9968/screenshot20100704at225.png – ChristopheD

+0

Her şeyi el ile tasarladım (kullanma Qt Designer), bu yüzden muhtemelen yanlış yaptığım bir şey: ^) Linux üzerinde 4.7.2 kullanıyorum, bu yüzden Linux-portunda bir şey farklı olabilir; Yine de şüpheliyim. Sorun büyük ihtimalle benim sonumda. Kazmaya devam edeceğim - teşekkürler! – bedwyr