2012-09-05 2 views
1

tableWidget에 텍스트를 채우는 동안 모든 행에 self.ui.tableWidget.resizeRowToContents을 사용했습니다. 그 이후 : self.ui.tableWidget.setSortingEnabled(1), 정렬은 예상대로 작동하지만 행의 내용은 더 이상 크기가 조정되지 않습니다. 실제로는 이전 높이가 유지됩니다.Python-QTableWidget : 헤더를 정렬 할 때 신호를 잡는 방법

name        name v     name v 
---------       ---------    --------- 
text2        text1line1    text1line1 
--------- after sort is clicked: --------- expected: text1line2 
text1line1            text1line3 
text1line2      text2     --------- 
text1line3            text2 
---------       ---------    --------- 

내 생각은 클릭 헤더에 정렬 할 때 신호를 잡아, 모든 행을 self.ui.tableWidget.resizeRowToContents 다시 이동하는 것입니다. 신호를 잡는 방법? 당신이 채울으로 당신은 또한 당신의 행에 대한 크기 조정 모드를 설정하려고 할 수 있습니다 http://doc.qt.nokia.com/4.7-snapshot/qheaderview.html

header = self.ui.tableWidget.horizontalHeader() 
header.sortIndicatorChanged.connect(self.fixRowSizes) 

:

답변

4

추가 된 모든 행에 resizeRowToContents을 호출 할 필요가 없습니다.

대신 테이블을 채우면 resizeRowsToContents 슬롯을 호출하면 모든 행의 크기가 한 번에 조정됩니다. 행 크기가 조정되도록 열을 정렬 할 때마다

당신은 다음의 sortIndicatorChanged 신호에 동일한 슬롯을 연결할 수 있습니다

# ... fill table, then: 
self.ui.tableWidget.setSortingEnabled(True) 
self.ui.tableWidget.resizeRowsToContents() 
self.ui.tableWidget.horizontalHeader().sortIndicatorChanged.connect(
    self.ui.tableWidget.resizeRowsToContents) 
+0

감사합니다, 즉 내가 찾던 정확히입니다. – Aleksandar

1

당신이 연결할 수있는 헤더 객체에 신호가있다

# grab the header object 
row_header = self.ui.tableWidget.verticalHeader() 

# populate some data 
self.ui.tableWidget.setRowCount(100) 
self.ui.tableWidget.setColumnCount(100) 
for row in range(100): 
    for col in range(100): 
     self.ui.tableWidget.setItem(row, col, QTableWidgetItem(str(row * col))) 

    # mark each row to automatically resize to contents 
    row_header.setResizeMode(row, QHeaderView.ResizeToContens) 

부정적인에게 ResizeToContents로 설정하면 크기에 대한 사용자 제어가 비활성화됩니다. 사용자가 수동으로 크기를 조정할 의사가 없으면이 방법을 사용하는 것이 좋습니다.