나는 (Gtk.TreeModel에서 상속 한) 커스텀 모델을 가진 Gtk.TreeView를 가지고 있으며 ~ 150K 행을 보여줍니다. 나는 PyGtk를 사용하고 있지만 그다지 중요하지 않아야한다.최적화 pygtk/gtk 정렬 된 열의 TreeView 대화 형 검색?
GUI 상호 작용은 정상이지만 대화 형 검색을 활성화하면 영원히 걸립니다 (1 초당 ~ 10 초). Searching a ListStore에서 이해하고 테스트 한 내용에 따라 interactive-search는 ListStore (내부적으로 연결된 목록으로 저장 됨)의 각 행을 검사하여 값을 찾습니다.
정렬 된 열을 검색하고 있으므로 이진 검색을 수행하려고합니다.
어떻게하면됩니까? 대화 형 검색을 처음부터 다시 프로그래밍해야합니까? TreeModelSort은 유용 할 수 있습니까? (내부 구조가 어떻게 관리되는지 모르겠다.)
내 자신의 검색 UI를 롤업하면 어떻게 시작해야할지 모르겠다. 스케치은 다음과 같습니다
- Disable built-in interactive search
- 가 검색 UI를 만들고
- 수동으로 데이터를 내 사용자 정의 표현에서 이진 검색을 할 권리의 키에 연결 (또는 정렬에 표시된 임의 액세스가 가능한 경우 행)
- 정확한 일치 항목을 선택하십시오.
3.의 경우는 행에 대한 랜덤 액세스가 GtkTreeModel에서 보인다
gtk.TreeModel 객체는 당신이 나타내는 gtk.TreeModelRow 객체를 검색 할 수 있습니다 파이썬 매핑 프로토콜의 일부를 지원
모델의 행.
정말 효율적으로 랜덤 액세스합니까?
질문을 명확하게 편집했습니다. TreeModel은 임의 액세스를 구현하지만 나에게는 기본 TreeStore가 없다고 당황 스럽습니다. 진실은 무엇입니까? –
@BastienJacquet'TreeModel'은 인터페이스이고,'TreeStore'와'ListStore'는 당신이 후자를 사용하고있는 구체적인 구현물입니다.'ListStore'는 링크리스트가 아니며, 내부적으로 시퀀스 API를 노출하는 트리 인'GSequence'를 사용하여 구현됩니다. 'GSequence' (그리고 결과적으로'ListStore'는 확장 성을 갖도록 설계되었으므로 목록의 어느 곳에서나 O (log n) 삽입과'O (log n)'임의 접근을 가능하게합니다. 예상 복잡도가'O (log^2 n)'인'ListStore'를 사용하여 이진 검색을 구현합니다. – user4815162342