2010-07-04 41 views
7

Tôi đang làm việc với thành phần QTableWidget trong PyQt4 và tôi dường như không nhận được cột đúng kích thước, theo độ dài tiêu đề tương ứng.Đặt chiều rộng cột tối thiểu thành chiều rộng tiêu đề trong PyQt4 QTableWidget

Đây là những gì bố trí bảng sẽ trông như thế (Ống sans, rõ ràng):

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

Mã Tôi đang làm việc với trông giống như sau:

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

Khi ứng dụng thực thi, cột đầu tiên khá rộng trong khi các cột khác được nén một phần.

Có cách nào để buộc bảng có kích thước theo độ rộng tiêu đề, thay vì chính dữ liệu không? Tốt hơn, có cách nào để buộc mỗi chiều rộng của cột phải là chiều rộng tối đa của các giá trị dữ liệu và tiêu đề không?

Cập nhật: Tôi đã thử gọi resizeColumnsToContents() trên bàn, nhưng quan điểm trở nên khủng khiếp đọc sai:

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

** Update2 **: resizeColumnsToContents() công trình chỉ tốt miễn là nó được gọi là sau tất cả các ô và tiêu đề đã được chèn vào bảng.

Trả lời

8
table.resizeColumnsToContents() 

nên thực hiện thủ thuật cho ví dụ cụ thể này.

Đảm bảo đánh dấu trang PyQt documentation nếu bạn chưa làm như vậy (tiện dụng khi bạn đang tìm kiếm một chức năng cụ thể).

+0

Cảm ơn bạn đã trả lời nhưng tôi đã thử resizeColumnsToContents(). Nó thay đổi kích thước các cột thành dữ liệu và các tiêu đề trở nên không đọc được. Tôi có tài liệu hiện tại (tôi sử dụng nó liên tục), nhưng tôi dường như không thể tìm thấy một giải pháp cho vấn đề này. – bedwyr

+0

@bedwyr: Có thể sự cố được kích hoạt ở nơi khác (thuộc tính trong tệp .ui (thiết kế) mà bạn thừa hưởng từ có lẽ?). Tôi không thể tái tạo vấn đề ở đây (PyQt 4.5.4 iirc, Mac). Đây là những gì mã ví dụ của bạn (với một 'table.resizeColumnsToContents()' được thêm vào đơn giản) trông giống như: http://img210.imageshack.us/img210/9968/screenshot20100704at225.png – ChristopheD

+0

Tôi đã thiết kế mọi thứ bằng tay (không sử dụng Qt Designer), vì vậy nó có thể là một cái gì đó tôi đang làm sai: ^) Tôi đang sử dụng 4.7.2 trên Linux, vì vậy nó có thể là một cái gì đó là khác nhau trong Linux-port; Tôi nghi ngờ nó mặc dù. Vấn đề là rất có thể là kết thúc của tôi. Tôi sẽ tiếp tục đào - cảm ơn! – bedwyr

Các vấn đề liên quan