2011-12-20 8 views
8

Ho una lista contenente liste con due voci, una parola e un numero. Questo elenco verrà presentato utilizzando un tablewidget.PyQt: Come posso impostare diverse dimensioni di intestazione per le singole intestazioni?

Il mio obiettivo è quello di produrre una tabella con due colonne e con le file necessarie, ma l'intestazione della colonna che avrà le parole dovrebbe essere più grande della colonna dei numeri.

Potrei usare le colonne di ridimensionamento per il contenuto, ma voglio la tabella senza lo spazio bianco vuoto bianco attorno al tavolo, dopo il ridimensionamento.

Per la creazione del codice GUI sto utilizzando QtDesigner.Thanks.

risposta

14

Esistono alcuni metodi della classe QHeaderView che probabilmente faranno ciò che si desidera. Il più semplice è:

table.horizontalHeader().setStretchLastSection(True) 

Questo farà sì che l'ultima colonna viene ridimensionata automaticamente per adattarsi allo spazio disponibile nella tabella, lasciando la larghezza delle altre colonne come sono (e ridimensionabili dall'utente).

In alternativa, esistono metodi per impostare lo ResizeMode delle colonne.

Per QT5:

table.setColumnWidth(1, 80) 
table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch) 

Per Qt4:

table.setColumnWidth(1, 80) 
table.horizontalHeader().setResizeMode(0, QHeaderView.Stretch) 

Ciò fissare la larghezza della seconda colonna, e garantire la prima colonna viene ridimensionata automaticamente per riempire lo spazio rimanente (ma impedendo qualsiasi altro ridimensionamento da parte dell'utente).

+0

C'è un modo per ottenere che l'utilizzo di Qt Desginer? C'è un'opzione? – GiannisIordanou

+0

Non c'è alcuna opzione nel designer per il 'ResizeMode', ma esiste per' setStretchLastSection' (ad esempio 'Header/horizontalHeaderStrechLastSection' nell'editor delle proprietà). – ekhumoro

4

la soluzione migliore per questo, in Qt5 è necessario utilizzare setSectionResizeMode invece di setResizeMode:

tabv = QTableView() 
tabv.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) 

o

tabv.horizontalHeader().setSectionResizeMode(1)