1. Home
  2. 프로그래밍/Python
  3. [PyQT] QTableWidget Column 숫자도 정렬되게 하기

[PyQT] QTableWidget Column 숫자도 정렬되게 하기

QTableWidget 에서 sortingEnabled 라는 속성을 True로 바꾸면 Column 을 클릭했을때 자동 정렬을 지원합니다.

 

저는 Qt Designer 로 작업을 하고 있어서 저렇게 QTableWidget의 Property Editor 에서 체크만 해주면 되고, 만약에 직접 하드 코딩 하고 계신 분들은 self.QTableWidget.setSortingEnabled(True) 와 같이 써주시면 될 거 같습니다.

 

그러나 이 정렬 기능은 문자열에만 한정된 것으로 숫자 또한 문자로 인식하기 때문에 숫자는 제대로 정렬이 되지 않습니다.

 

해결 방법은 QTableWidget에 아이템을 추가해줄때 숫자인걸 알려주고 추가해주면 됩니다.

 

rowPosition = self.articleView.rowCount()
self.articleView.setItem(rowPosition, column, QTableWidgetItem(str))

일반적으로 QTableWidget에 아이템을 추가(append)할땐 다음과 같이 작업합니다.

위와 같은 방식은 문자열을 아이템으로 추가할때 하는 방법입니다.

 

item_refresh = QTableWidgetItem()
item_refresh.setData(Qt.DisplayRole, int(refresh)) #숫자로 설정 (정렬을 위해)
self.articleView.setItem(rowPosition, column, item_refresh)

아이템이 숫자란것을 명시하고 싶으면 다음과 같이 setData() 메소드를 활용합니다. 중요한 것은 2번째 인자값에 int형 값을 넣어야 한다는 것입니다.

 

refresh 라는 것은 추천수로 문자열인데, int를 사용해서 명시적으로 바꿔줘야 합니다.

이미 int값이라면 그냥 넣어주시면 됩니다.

 

그리고 빈 QTableWidgetItem() 을 만들어주는게 가장 중요합니다.

 

위 소스를 이용하여 추천수로 내림차순 정렬한 예시입니다.

 

내용 참고

https://stackoverflow.com/questions/60512920/sorting-numbers-in-qtablewidget-work-doesnt-right-pyqt5

 

Sorting numbers in QTableWidget work doesnt right Pyqt5

There are column with numbers only. But it sorts like that: And how this part of code looks like: self.table = QTableWidget(self) self.table.setColumnCount(5) self.table.setRowCount(0) ...

stackoverflow.com

 

SNS 공유하기
네이버밴드
카카오톡
페이스북
X(트위터)

최근글
인기글
이모티콘창 닫기
울음
안녕
감사
당황
피폐