• 목록
  • 아래로
  • 위로

안녕하세요?


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. (2%) 3626570/115200000EXP

Make StudyForUs Great Again!

 

CSVpuymXAAAVVpd.jpg

댓글 0

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 시스템 점검 작업 완료 안내 10 마스터 마스터 24.09.05.16:25 842
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 7675
557 색상선택 결정문제를 겪고 계신 분들 위한 사이트 OAUTH2 20.06.19.18:22 93
556 [Python] Ubuntu에서 파이썬이 설치된 디렉토리를 간단히 확인하는 방법 2 이니스프리 이니스프리 20.08.03.22:58 113
555 순수 React만으로 다이내믹 태그 네이밍하기 Seia Seia 20.01.20.19:18 115
554 [펌] Chrome will soon be less of a memory hog in Windows 10 3 이니스프리 이니스프리 20.06.24.00:12 119
553 [Javascript] 값을 이용하여 배열의 요소를 삭제하는 방법 이니스프리 이니스프리 21.04.13.22:10 122
552 [Python] 문자열에서 파일명 또는 폴더명으로 시스템상 지원되는 글자를 제외하고 삭제하기 이니스프리 이니스프리 20.11.01.14:37 125
551 React 그리고 Redux 쉽게 이해하기 image Seia Seia 20.09.12.06:31 127
550 나리야 익명보드 및 내 글 알림 관련 Q&A image 이니스프리 이니스프리 21.02.14.17:30 129
549 [카고야] 공지 메일이 왔네요~ 이니스프리 이니스프리 20.01.08.13:27 130
548 IPVanish의 한국서버가 4개로 확충되었습니다. image 이니스프리 이니스프리 20.01.11.11:27 130
547 [오프라인 강좌] 오픈소스 협업을 위한 Git 트레이닝 image 이니스프리 이니스프리 20.01.08.00:13 132
546 [Python] 크롤링한 bytes를 string으로 변환 이니스프리 이니스프리 21.02.14.15:32 133
545 중국 배대지 휴무 이니스프리 이니스프리 20.01.14.13:01 134
544 '20 SNULT 일정 image 이니스프리 이니스프리 19.11.23.13:07 135
543 DHTML 에디터에서 Hard Break vs Soft Break 이니스프리 이니스프리 20.01.12.13:48 135
542 [Python] Sending SMTP メール(Gmail) - Redmail module 이니스프리 이니스프리 22.06.02.20:38 135
541 이베이에서 저렴하게 올라오는 보안 프로그램에 관하여 이니스프리 이니스프리 19.12.26.12:12 136
540 [Flutter] 오프라인 강좌 이니스프리 이니스프리 20.01.09.00:12 136
539 [Dropbox] 곧 시행될 세금 변경에 관한 중요한 알림 image 이니스프리 이니스프리 19.10.12.08:26 137
538 구글 검색 Tip image 슬기 슬기 19.10.14.11:42 137