2011-12-20 46 views
8

Tôi có một danh sách chứa các danh sách có hai mục, một từ và một số. Danh sách này sẽ được trình bày bằng cách sử dụng một tablewidget.PyQt: Làm cách nào để đặt kích thước tiêu đề khác nhau cho từng tiêu đề?

Mục tiêu của tôi là tạo một bảng có hai cột và với các hàng cần thiết, nhưng tiêu đề của cột sẽ có các từ phải lớn hơn cột số.

Tôi có thể sử dụng đổi kích thước cột thành nội dung, nhưng tôi muốn bảng không có khoảng trắng trống màu trắng xung quanh bảng, sau khi thay đổi kích thước.

Để tạo mã gui, tôi đang sử dụng QtDesigner.Thanks.

Trả lời

14

Có một vài phương pháp của lớp học QHeaderView có thể sẽ làm những gì bạn muốn. Cách đơn giản nhất là:

table.horizontalHeader().setStretchLastSection(True) 

Điều này sẽ đảm bảo rằng các cột cuối cùng được tự động thay đổi kích cỡ để phù hợp với không gian có sẵn trong bảng, để lại độ rộng của các cột khác như họ đang có (và thay đổi kích thước của người sử dụng).

Ngoài ra, có các phương pháp để đặt ResizeMode của các cột.

Đối Qt5:

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

Đối Qt4:

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

này sẽ sửa chữa độ rộng của cột thứ hai, và đảm bảo cột đầu tiên được tự động thay đổi kích cỡ để lấp đầy khoảng trống còn lại (nhưng ngăn ngừa bất kỳ thay đổi kích thước nào khác của người dùng).

+0

Có cách nào để đạt được điều đó bằng Qt Desginer? Có lựa chọn nào không? – GiannisIordanou

+0

Không có tùy chọn trong trình thiết kế cho 'ResizeMode', nhưng có cho' setStretchLastSection' (tức là 'Header/horizontalHeaderStrechLastSection' trong Property Editor). – ekhumoro

4

giải pháp tốt nhất cho điều này, trong Qt5 bạn phải sử dụng setSectionResizeMode thay vì setResizeMode:

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

hoặc

tabv.horizontalHeader().setSectionResizeMode(1) 
Các vấn đề liên quan