• 목록
  • 아래로
  • 위로

안녕하세요?


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. (1%) 2843910/115200000EXP

Make StudyForUs Great Again!

 

CSVpuymXAAAVVpd.jpg

댓글 0

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [1차 해결 및 추가] 서버 접속 불가 문제 안내 14 마스터 마스터 24.06.20.15:22 974
공지 [작업 완료] 설 명절 맞이 서버 업데이트 안내 3 마스터 마스터 24.02.11.17:21 2929
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 6708
316 [이벤트정보] V3 모바일 시큐리티 설치 후 개인정보 클리너 실행시 오로나민 쿠폰 image 이니스프리 이니스프리 17.01.16.11:23 311
315 [생활정보] 60초만에 잠드는 호흡법 (기사 및 관련 보도 포함) 6 image 이니스프리 이니스프리 17.02.12.21:54 312
314 [신제품정보] 크리스피크림 신메뉴 출시! 이니스프리 이니스프리 17.02.02.23:35 312
313 레오폴드 FC980C 30g 균등 모델 출시 image 이니스프리 이니스프리 19.04.13.23:51 312
312 멘션 설정을 해주세요. 1 image 에듀 title: 맛스타의 자물쇠에듀 16.12.01.20:47 312
311 JavaScript와 Canvas로 이미지의 배경값을 자동으로 산출하기 Seia Seia 20.09.12.06:37 313
310 파일질라 최신버전에서 윈도우 비스타를 지원 종료했네요 1 title: 은메달도다 17.05.27.15:45 314
309 [강의/강좌] 비판적인 사고를 할 수 있게 해주는 5가지 원칙 image death death 17.01.27.09:22 316
308 [생활정보] 교보문고 매월 22일~28일, e캐시 더블적립 3 image 이니스프리 이니스프리 17.01.23.23:47 316
307 트래픽 절감 관련 모 커뮤니티 사이트의 회의 결과 이니스프리 이니스프리 24.05.15.16:51 317
306 생활 속 전기 절약하기 3 image 맛수타 17.06.06.13:55 317
305 [할인정보] 비트디펜더 50% 할인 이벤트 이니스프리 이니스프리 17.02.05.22:35 317
304 해외 VPS를 게이트웨이/프록시 서버로 사용하여 국내 100회선의 서버 속도를 높여보자 5 Seia Seia 18.12.04.22:52 318
303 그누보드(아미나) 게시판의 첨부파일을 크롤링할 때 세션 관련 유의할 점 1 이니스프리 이니스프리 19.11.18.23:00 319
302 [역사정보] 한 눈에 보는 조선왕조 계보도. 1 image death death 17.01.26.21:33 320
301 [정규식] 문자열에 괄호 넣기 이니스프리 이니스프리 20.07.01.18:37 320
300 [이벤트정보] 스킨큐어 신년음악회 개최, 30명에게 티켓 쏜다 1 image 이니스프리 이니스프리 17.01.01.13:00 321
299 [Python] \u3000을 공백으로 치환하기 이니스프리 이니스프리 23.10.29.14:51 321
298 [생활정보] 지진 발생시 상황별 대피 요령. image death death 17.01.25.21:21 322
297 [할인정보] 노턴, 맥아피 안티바이러스 할인 2 image 이니스프리 이니스프리 17.01.01.13:45 322