• 목록
  • 아래로
  • 위로

안녕하세요?


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 755
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 4428
286 '20 SNULT 일정 image 이니스프리 이니스프리 19.11.23.13:07 122
285 [Requests_HTML] ImportError: cannot import name 'HTMLSession' from 'requests_html'에 대한 대처방법 이니스프리 이니스프리 19.11.22.00:33 250
284 [파이썬] 리스트에서 중복되는 요소를 제거하기 이니스프리 이니스프리 19.11.20.21:47 228
283 [Vultr] Important Tax Notice 이니스프리 이니스프리 19.11.20.07:38 167
282 램노드에서 허용되는 행위 vs 금지되는 행위 1 이니스프리 이니스프리 19.11.19.12:59 227
281 그누보드(아미나) 게시판의 첨부파일을 크롤링할 때 세션 관련 유의할 점 1 이니스프리 이니스프리 19.11.18.23:00 313
280 Selenium에서 파일을 다운받을 폴더를 지정하기 이니스프리 이니스프리 19.11.18.22:15 4335
279 ESET의 삭제방법 (공홈 removal tool) 이니스프리 이니스프리 19.11.18.12:54 546
278 [Requests] params, data 전달시에 딕셔너리의 구조가 복잡한 경우 해결방법 이니스프리 이니스프리 19.11.17.14:55 145
277 Tesseract에서 숫자만 인식하는 방법 이니스프리 이니스프리 19.11.16.14:48 2882
276 [OpenCV] !_src.empty() in function 'cvtColor' 에러 해결방법 2 이니스프리 이니스프리 19.11.15.20:40 12738
275 [Pillow] 파이썬에서 이미지 파일의 포맷을 알아내는 방법 이니스프리 이니스프리 19.11.14.23:25 129
274 [파이썬] Selenium 쿠키를 Requests에서 불러오는 방법 이니스프리 이니스프리 19.11.10.15:13 2359
273 파이썬에서 리스트의 문자열들이 특정 문자열 안에 포함되어 있는지 확인하는 방법 1 이니스프리 이니스프리 19.11.10.02:34 2879
272 (펌) 우분투에 IPVanish 설치 방법 이니스프리 이니스프리 19.11.07.22:46 129
271 크롤링용 서버에서 홈서버가 VPS보다 유리한 점 이니스프리 이니스프리 19.11.07.20:53 236
270 11월 플러터 오프라인 강좌 이니스프리 이니스프리 19.11.06.13:41 177
269 파이썬 & 데이터 분석 & 웹 크롤링 오프라인 강의 image 이니스프리 이니스프리 19.11.03.01:41 200
268 [파이썬] Selenium에서 클릭이 안 될 때의 해결방법 이니스프리 이니스프리 19.10.27.22:20 10374
267 현 시점에서 홈 서버로 가장 적절한 미니 PC 중 하나를 추천 드립니다 image 이니스프리 이니스프리 19.10.26.20:10 1750