2010-07-04 2 views
7

Я работаю с компонентом QTableWidget в PyQt4, и я не могу получить правильные размеры столбцов в соответствии с их соответствующими размерами заголовков.Установите минимальную ширину столбца на ширину заголовка в PyQt4 QTableWidget

Вот что макет таблицы должна выглядеть (без труб, очевидно):

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

Код я работаю выглядит примерно так:

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_() 

Когда приложение выполняет, первая колонка довольно широкая, а другие столбцы несколько сжаты.

Есть ли способ заставить таблицу размеру в соответствии с шириной заголовка, а не самими данными? Еще лучше, есть ли способ заставить каждую ширину столбца быть максимальной шириной значений данных и заголовков?

Update: Я пытался дозвониться resizeColumnsToContents() на столе, но вид становится ужасно изуродованным:

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

** Update2 **: resizeColumnsToContents() работает нормально до тех пор, как это называется после все ячейки и заголовки были вставлены в таблицу.

ответ

8
table.resizeColumnsToContents() 

должен сделать трюк для этого конкретного примера.

Обязательно запишите PyQt documentation, если вы еще этого не сделали (удобно, если вы ищете определенную функцию).

+0

Спасибо за ответ, но я уже попробовал resizeColumnsToContents(). Он изменяет размеры столбцов на данные, а заголовки становятся нечитаемыми. У меня есть документация (я использую ее постоянно), но я не могу найти решение этой неприятной проблемы. – bedwyr

+0

@bedwyr: Может быть проблема запущена в другом месте (свойства в файле .ui (designer), который вы наследуете, возможно,?). Я не могу воспроизвести проблему здесь (PyQt 4.5.4 iirc, Mac). Это то, что ваш примерный код (с добавлением простой 'table.resizeColumnsToContents()') выглядит следующим образом: http://img210.imageshack.us/img210/9968/screenshot20100704at225.png – ChristopheD

+0

Я разработал все вручную (не используя Qt Designer), поэтому, вероятно, я что-то делаю неправильно: ^) Я использую 4.7.2 на Linux, так что в Linux-порту возможно что-то другое; Но я сомневаюсь. Проблема, скорее всего, на моем конце. Я буду рыть - спасибо! – bedwyr

Смежные вопросы