• 목록
  • 아래로
  • 위로

안녕하세요?


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

Make StudyForUs Great Again!

 

CSVpuymXAAAVVpd.jpg

댓글 0

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [작업 완료] 설 명절 맞이 서버 업데이트 안내 3 마스터 마스터 24.02.11.17:21 760
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 4432
286 애드센스 광고 블럭 차단방지 소스 2 슬기 슬기 18.10.06.09:59 362
285 Linux에서 Screen 패키지를 사용하는 방법과 그 이유 6 image Seia Seia 19.02.20.03:28 360
284 물리학에 대해서 좀더 심층적으로 배워보고 싶다하는 분들 들어와보세요 Adam title: 대한민국 국기Adam 17.10.09.17:32 358
283 [밤에 하는 사람들을 위한 팁] Windows 10에 내장된 야간모드 image Seia Seia 17.11.09.00:44 357
282 [Python] 유튜브 영상을 PC에 다운받은 후 영상파일을 90도 rotation 하기 (youtube_dl + moviepy) 4 이니스프리 이니스프리 20.10.03.17:58 357
281 [할인정보] 나뚜르 트리플컵 1+1 5 image 이니스프리 이니스프리 17.01.15.21:53 354
280 맥도날드 슈비버거 단품 1+1 쿠폰  2 title: 네오웨이브네오웨이브 17.03.16.13:14 346
279 Windows 배치파일 작성 시 귀차니즘 1% 해결 Seia Seia 17.12.03.11:37 344
278 [보안정보] Avast 업데이트 주의요망합니다 ㅠㅠ 7 이니스프리 이니스프리 17.02.22.23:29 342
277 [할인정보] 판다 글로벌 프로텍션 2,700원 (1년 1PC) 5 이니스프리 이니스프리 17.03.11.23:30 342
276 [정보] 일상적인 물건들에 숨겨진 비밀 13가지.jpg image 하루살이 title: 황금 서버 (30일)하루살이 16.12.17.12:43 342
275 [생활정보] 굽네치킨 신메뉴 출시 - '갈비천왕' 1 이니스프리 이니스프리 16.12.22.14:44 340
274 [유튜브] 타인의 유튜브 재생목록 공유하기 image 이니스프리 이니스프리 19.01.04.19:49 338
273 [Python] 두 개의 리스트를 한꺼번에 for문으로 돌리기 1 이니스프리 이니스프리 20.11.23.20:30 338
272 For Intel 8th GEN 4 Seia Seia 17.12.15.20:14 337
271 파이썬3에서 인코딩과 관련된 문제의 해결방법 3 이니스프리 이니스프리 18.11.06.00:49 337
270 [할인정보]험블번들에서 데몬툴즈를 싸게 구매하자! 9 Dobob title: 도밥위키!Dobob 17.02.21.22:32 335
269 [Python] 최소공배수 구하기 이니스프리 이니스프리 20.02.12.00:11 327
268 여러분은 Behance를 아시나요? Seia Seia 17.12.15.20:51 327
267 Vultr에 10% VAT가 가산되면... (한화 계산) 3 이니스프리 이니스프리 19.11.23.18:58 327