• 목록
  • 아래로
  • 위로

안녕하세요?


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

Make StudyForUs Great Again!

 

CSVpuymXAAAVVpd.jpg

댓글 0

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [작업 완료] 설 명절 맞이 서버 업데이트 안내 3 마스터 마스터 24.02.11.17:21 857
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 4531
549 [Python] 소수점 자리수의 출력 - round() vs format() 1 이니스프리 이니스프리 20.02.15.11:53 31773
548 [Python] 파일을 읽어서 각 행을 리스트로 만드는 5가지 방법 이니스프리 이니스프리 18.11.25.22:16 23320
547 안티앨리어싱 옵션: 알고 쓰자. 5 image 하루살이 title: 황금 서버 (30일)하루살이 17.02.25.23:57 19434
546 GIF 파일의 용량을 줄여주는 사이트 - gifgifs.com image 이니스프리 이니스프리 17.10.09.12:57 17667
545 [Python] tqdm과 enumerate를 함께 사용하기 이니스프리 이니스프리 20.05.29.19:07 16520
544 [OpenCV] !_src.empty() in function 'cvtColor' 에러 해결방법 2 이니스프리 이니스프리 19.11.15.20:40 12742
543 윈도우 작업 스케줄러에서 특정 작업이 실행 안 되는 경우 해결방법 (배치파일 등의 상대경로 관련) 2 image 이니스프리 이니스프리 18.10.02.19:38 12393
542 [파이썬] Selenium에서 클릭이 안 될 때의 해결방법 이니스프리 이니스프리 19.10.27.22:20 10376
541 [Python] Requests에서 JSON 데이터를 POST 전송하는 방법 x2 이니스프리 이니스프리 21.08.22.08:16 9625
540 [Selenium] select box, check box, radio button 조작하기 이니스프리 이니스프리 20.06.27.15:47 8451
539 유튜브 iframe api의 autoplay 옵션과 관련하여 1 image 이니스프리 이니스프리 19.01.05.14:45 7530
538 윈도우 MAK 라이센스의 인증 가능횟수 확인방법 4 이니스프리 이니스프리 18.11.21.23:53 7518
537 일본 아마존에서 MP3 음원 구입하는 방법 5 image 제르엘 제르엘 19.12.23.01:28 7378
536 DB 설계하실 때 사용하면 좋을거 같은 사이트 공유합니다. 1 image JAVA JAVA 17.11.21.15:06 6996
535 국전 '빨간집' 위치 및 영업시간 등 정보 3 이니스프리 이니스프리 18.11.30.16:17 6751
534 제조사별 서버 원격관리 툴의 명칭 정리 (iLO, iDRAC, IPMI 등) 이니스프리 이니스프리 18.11.22.22:10 6499
533 해외직구시 카드 중복결제에 대하여 (아마존 등) 9 이니스프리 이니스프리 18.12.30.15:52 6110
532 텔레그램 비밀대화의 스크린캡쳐 방지기능 이니스프리 이니스프리 20.01.20.23:44 5882
531 크롬 원격 데스크톱 조작법 2 이니스프리 이니스프리 20.06.03.23:03 5822
530 윈도우의 CMD 창에서 Ctrl+V로 붙여넣기 (윈도우 10 / 윈도우 8 이하) 3 image 이니스프리 이니스프리 18.11.08.00:15 5757