• 목록
  • 아래로
  • 위로

안녕하세요?


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%) 1948280/115200000EXP

Make StudyForUs Great Again!

 

CSVpuymXAAAVVpd.jpg

댓글 0

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [작업 완료] 설 명절 맞이 서버 업데이트 안내 3 마스터 마스터 24.02.11.17:21 922
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 4593
349 2019년 공휴일 미리보기(?) 2 image 이니스프리 이니스프리 19.01.05.11:46 249
348 유튜브 iframe api의 autoplay 옵션과 관련하여 1 image 이니스프리 이니스프리 19.01.05.14:45 7530
347 체온계/의료기기의 통관과 관련된 사항입니다 1 이니스프리 이니스프리 19.01.17.01:52 1552
346 변압기 소음을 줄이는 방법 6 이니스프리 이니스프리 19.01.27.12:27 2158
345 토크멘터리 전쟁사를 유튜브에 업로드 되기 전에 시청하는 방법 이니스프리 이니스프리 19.01.27.12:40 270
344 [Vultr] 2/1 service alert 이니스프리 이니스프리 19.01.31.12:12 129
343 [아미나] 한별아빠 님의 미소 심플 1.0 테마 출시, 미소 컴퍼니 2.2 테마 업그레이드, jake 님의 PORTFOLIO 테마 출시 5 이니스프리 이니스프리 19.02.01.00:46 216
342 [강좌 추천] 파이썬을 파이썬답게 7 이니스프리 이니스프리 19.02.01.12:20 214
341 [스퀘어넷] Ubuntu Server 18.04 LTS 지원 1 이니스프리 이니스프리 19.02.04.22:20 166
340 [학습정보] 구글 게이밍 아카데미 2/18 9 image 이니스프리 이니스프리 19.02.05.16:38 188
339 [아미나] 미소 컴퍼니 / 미소 심플 테마와 관련된 정보 1 이니스프리 이니스프리 19.02.05.16:51 179
338 직구시 건강보조식품의 통관과 관련하여 1 이니스프리 이니스프리 19.02.05.23:33 556
337 Linux에서 Screen 패키지를 사용하는 방법과 그 이유 6 image Seia Seia 19.02.20.03:28 360
336 [아미나] 아미나 2.0으로의 리뉴얼 계획 이니스프리 이니스프리 19.03.12.13:03 173
335 Asus MB169AC를 USB Type-C 아닌 포트에서 사용하는 방법 이니스프리 이니스프리 19.03.16.06:45 261
334 ASUS DisplayWidget 실행시 메인모니터의 디스플레이 설정이 초기화 되는 것과 관련하여 1 이니스프리 이니스프리 19.03.21.21:18 240
333 cPanel의 Full backup의 옵션 1 image 이니스프리 이니스프리 19.03.22.22:36 175
332 크롬 버전 73에서 bxSlider 관련 문제에 대한 해결책 이니스프리 이니스프리 19.03.26.19:25 492
331 특정 사이트 접속이 느려질 때 해결방법 (Browser Helper Objects 관련) 3 이니스프리 이니스프리 19.03.28.13:17 647
330 [관세청] 해외 직구 통관 길라잡이 (PDF 파일 다운로드 링크) 이니스프리 이니스프리 19.03.31.10:01 243