Sto lavorando con il componente QTableWidget
in PyQt4 e non riesco a ottenere colonne correttamente dimensionate, in base alle rispettive lunghezze di intestazione.Imposta la larghezza minima della colonna alla larghezza dell'intestazione in PyQt4 QTableWidget
Ecco ciò che il layout della tabella dovrebbe essere simile (sans tubi, ovviamente):
Index | Long_Header | Longer_Header
1 | 102402 | 100
2 | 123123 | 2
3 | 454689 | 18
Il codice con cui sto lavorando sembra qualcosa di simile:
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_()
Quando l'applicazione viene eseguita, la prima colonna è piuttosto ampia mentre le altre colonne sono un po 'compresse.
C'è un modo per forzare la tabella in base alle larghezze dell'intestazione anziché ai dati stessi? Meglio ancora, c'è un modo per forzare ogni larghezza di colonna ad essere la larghezza massima dei dati e dei valori di intestazione?
Aggiornamento: Ho provato a chiamare resizeColumnsToContents()
sul tavolo, ma la vista diventa orribilmente straziati:
Python Table http://img514.imageshack.us/img514/8633/tablef.png
** ** Update2: resizeColumnsToContents()
funziona bene fino a quando si chiama dopo tutte le celle e le intestazioni sono state inserite nella tabella.
Grazie per la risposta, ma ho già provato resizeColumnsToContents(). Ridimensiona le colonne ai dati e le intestazioni diventano illeggibili. Ho la documentazione presente (la uso costantemente), ma non riesco a trovare una soluzione a questo problema irritante. – bedwyr
@bedwyr: Forse il problema si verifica altrove (proprietà in un file .ui (designer) ereditato da forse?). Non riesco a riprodurre il problema qui (PyQt 4.5.4 iirc, Mac). Questo è il codice di esempio (con un semplice 'table.resizeColumnsToContents()' aggiunto): http://img210.imageshack.us/img210/9968/screenshot20100704at225.png – ChristopheD
Ho progettato tutto a mano (non usando Qt Designer), quindi è probabile che qualcosa stia sbagliando: ^) Sto usando 4.7.2 su Linux, quindi è possibile che ci sia qualcosa di diverso nella porta Linux; Ne dubito comunque. Il problema è molto probabilmente alla mia fine. Continuerò a scavare - grazie! – bedwyr