qtreeview의 헤더를 클릭했을때.. 아이템을 natural sort 하는 코드..
re_human_key = re.compile(r'(\d*\.\d+|\d+)')
class NaturalSortProxyModel(QSortFilterProxyModel):
_key_cache = {}
def _human_key(self, key):
if key is None:
key = ''
if key not in self._key_cache:
parts = re_human_key.split(str(key))
human_key = tuple((e.swapcase() if i % 2 == 0 else float(e)) for i, e in enumerate(parts))
self._key_cache[key] = human_key
return self._key_cache[key]
def lessThan(self, left, right):
leftData = self.sourceModel().data(left)
rightData = self.sourceModel().data(right)
if isinstance(leftData, (int, float)) and isinstance(rightData, (int, float)):
return leftData < rightData
return self._human_key(leftData) < self._human_key(rightData)
'블로그 (Blog) > 개발로그 (Devlogs)' 카테고리의 다른 글
LÖVE (0) | 2025.04.19 |
---|---|
Python List <--> Tcl List 상호 변환 (0) | 2025.04.03 |
glm 10,10,10,2 패킹 (0) | 2025.03.25 |
벡터에 수직인 뱡향 벡터 구하기.. (0) | 2025.03.05 |
디바이스 드라이버에서 atof 함수 구현 (0) | 2025.02.18 |