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
'프로그래밍 > Python' 카테고리의 다른 글
[PyQT] pyinstaller로 윈도우 아이콘, UI, 프로그램 아이콘 전부 exe에 포함시키기 (2) | 2022.01.21 |
---|---|
[PyQT] QTableWidget Item에 이미지와 텍스트 동시에 표시되게 하기 (0) | 2022.01.20 |
[Python] 아버지 업무 자동화 의뢰작 완성 (0) | 2022.01.19 |
[Python] Selenium 스크롤 클릭해서 수동으로 내리기 (0) | 2022.01.16 |
[Python] PyQt5 학습 정보, 쓰레드 작업 등 정보 모음 (0) | 2022.01.14 |