• 목록
  • 아래로
  • 위로

안녕하세요?


PyQt5의 Item views 중 treeView에서 헤더를 클릭하여 정렬하는 것에 대해 간단한 팁을 적어봅니다.



처음부터 treeView.setSortingEnabled(True)로 설정해놓고 appendRow로 출력하게 되면


출력순서가 초기에 설정해놓은 순서와는 다르게 정렬을 클릭한 상태와 마찬가지의 상태로 출력되어버리는 문제가 있습니다.


따라서 처음 출력을 할 때에는 treeView.setSortingEnabled(False)로 설정을 한 후에 appendRow로 출력을 해야 합니다.

(물론 처음부터 정렬된 상태로 출력하기를 원하시는 경우에는 굳이 이렇게 하실 필요가 없겠죠 ^^)



그런데 treeView.setSortingEnabled(True)로 설정한 경우에는


자동으로 treeView.header().setSectionsClickable(True)가 지정되어 헤더를 클릭할 수 있지만,


treeView.setSortingEnabled(False) 상태에서 헤더를 클릭 가능하게 하려면


treeView.header().setSectionsClickable(True)으로 지정해야 합니다.

(False 상태에서 마우스로 헤더를 클릭해도 아무런 변화가 일어나지 않습니다.)


이를 정리하면 대략 다음과 같은 방식으로 하면 됩니다.





self.treeView.setSortingEnabled(False)

self.treeView.header().setSectionsClickable(True)


# QStandardItemModel().appendRow를 이용하여 출력


self.treeView.header().sectionClicked.connect(self.HeaderClicked) # 헤더 클릭에 대한 시그널과 슬롯을 연결


def HeaderClicked(self):

    self.treeView.setSortingEnabled(True) # 이것만으로 sorting이 됩니다.

    time.sleep(0.1) # 환경에 따라서는 0.1초 정도 텀을 두는 것이 좋습니다.

    self.treeView.setSortingEnabled(False) # 다시 처음과 같은 상태로 Sorting을 끄고, Clickable을 켭니다.

    self.treeView.header().setSectionsClickable(True)

    return





유독 국내에는 treeView의 헤더에 대한 웹문서가 별로 없더군요.


PyQt5의 공식문서에도 이 부분에 대한 설명이 상세하게 나와있지 않아서 저도 삽질을 했네요 ㅠㅠ


다른 분들께서는 저처럼 실수를 하시지 않았으면 하는 생각에 적어봤네요~


그럼 즐거운 주말 되세요!


작성자
이니스프리 119 Lv. (0%) 2262450/115200000EXP

Make StudyForUs Great Again!

 

CSVpuymXAAAVVpd.jpg

댓글 0

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [작업 완료] 설 명절 맞이 서버 업데이트 안내 3 마스터 마스터 24.02.11.17:21 1059
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 4737
74 SSH에서 자주쓰는 명령어를 짧게 만들어 놓기 2 NoYeah NoYeah 17.09.29.15:00 518
73 SSFSHOP에서 모든 사이즈가 조회되는 것은 아니군요 1 이니스프리 이니스프리 20.03.08.17:45 137
72 Sourcerer: Git을 비주얼라이징 및 프로파일링합니다. image Seia Seia 20.01.20.07:38 131
71 SKT 데이터 함께 쓰기, 회선수 제한, 직구폰 개통, 아이폰 직구시 주의사항 등 관련 팁 2 이니스프리 이니스프리 17.11.23.20:58 3913
70 Selenium에서 파일을 다운받을 폴더를 지정하기 이니스프리 이니스프리 19.11.18.22:15 4352
69 Selenium에서 파일 업로드할 때 파일을 선택하는 방법 이니스프리 이니스프리 19.07.02.23:45 2629
68 React 그리고 Redux 쉽게 이해하기 image Seia Seia 20.09.12.06:31 104
67 PyQt5의 designer.exe 경로 이니스프리 이니스프리 19.07.01.20:09 580
PyQt5에서 treeView의 헤더를 클릭하여 정렬하기 - treeView.setSortingEnabled 메서드와 관련하여 이니스프리 이니스프리 19.08.09.15:38 484
65 Programmers에서 비메오 오류로 강의가 재생되지 않을 때 해결방법 이니스프리 이니스프리 19.12.10.19:22 1095
64 Postman에서 Temporary Header는 비활성화할 수 없습니다. 3 image Seia Seia 20.01.20.19:31 228
63 PHP로 페이스북을 크롤링할 때 유의할 점 이니스프리 이니스프리 19.08.18.01:29 713
62 php8.0 대응 라이믹스 오류 해결법 NUBE title: 크롬NUBE 21.03.08.11:39 269
61 php7 의 큰 장점 4 image ToriaTo 16.07.21.16:07 790
60 PHP 7에서 아미나 구형 위젯 사용시 수정해야 할 부분 2 이니스프리 이니스프리 17.11.07.20:48 419
59 PHP 7.4 beta 1 환경에서 그누보드 5.4.0.1 설치 가능 여부 이니스프리 이니스프리 19.07.23.13:37 413
58 Owl Carousel에서 버전별 하단 dots를 없애는 방법 image 이니스프리 이니스프리 18.10.29.18:25 853
57 OpenCV를 이용한 face detection에서 parameter에 대하여 이니스프리 이니스프리 19.12.05.18:57 257
56 online 개발 툴입니다. 10 해피보이 20.07.01.11:27 177
55 Nginx 에서 라이믹스 짧은 주소 사용하기 title: 은메달도다 17.04.15.19:52 756