본문 바로가기
Software/Python

PyQt5, QtableWidget 컬럼 너비 자동 조정

by lovey25 2020. 9. 8.
반응형

PyQt5에서 QtableWidget을 사용할 때 컬럼 너비를 조정하는 방법입니다.

방법1

table = self.ui.tableWidget

table.setColumnWidth(0, self.width()*1/10)
table.setColumnWidth(1, self.width()*2/10)
table.setColumnWidth(2, self.width()*5/10)
table.setColumnWidth(3, self.width()*2/10)

테이블의 컬럼은 4개가 있다고 가정하고 각 컬럼의 너비를 일정한 비율로 조정합니다.

컨텐츠 길이의 장단에 관계없이 정해진 비율대로만 조정합니다.

방법2

table = self.ui.tableWidget
header = table.horizontalHeader()

header.setSectionResizeMode(0, QHeaderView.ResizeToContents)
header.setSectionResizeMode(1, QHeaderView.ResizeToContents)
header.setSectionResizeMode(2, QHeaderView.ResizeToContents)
header.setSectionResizeMode(3, QHeaderView.ResizeToContents)

컨텐츠의 길이에 따라서 자동으로 컬럼너비를 조정합니다. 하지만 테이블 전체 너비와 관계없이 컨텐츠 길이에 맞게 조절되기 때문에 마지막 컬럼이 너무 크거나 작은 문제가 있습니다.

방법3

table = self.ui.tableWidget
header = table.horizontalHeader()
twidth = header.width()
width = []
for column in range(header.count()):
header.setSectionResizeMode(column, QHeaderView.ResizeToContents)
width.append(header.sectionSize(column))

wfactor = twidth / sum(width)
for column in range(header.count()):
header.setSectionResizeMode(column, QHeaderView.Interactive)
header.resizeSection(column, width[column]*wfactor)

위의 방법1, 2를 짬뽕한 것으로 테이블 전체 너비와 컨텐츠들의 비율에 따라 자동으로 컬럼 너비를 조정합니다.

컨텐츠의 길이에 따른 각 컬럼의 너비를 비율로하여 전체 테이블 너비에 맞게 컬럼을 조정합니다. 테이블 리프레시에 삽입하면 항상 컬럼너비가 조정되도록 할 수 있습니다.

QHeaderView, resize 모드에 대한 설명은 아래 문서에서 확인할 수 있습니다.

 

QHeaderView Class | Qt Widgets 5.15.0

QHeaderView Class The QHeaderView class provides a header row or header column for item views. More... Public Types enum ResizeMode { Interactive, Fixed, Stretch, ResizeToContents, Custom } Properties Public Functions Reimplemented Public Functions virtual

doc.qt.io

 

끝!

반응형

댓글