Я хотел бы добавить 1,000,000+ записей в корневой узел TreeListCtrl. Поэтому я хотел бы сделать его «виртуальным», т. Е. Работать так же, как виртуальный ListCtrl, чтобы он все еще был быстрым, и я могу легко прокручивать его из-за того, что отображаемые в данный момент элементы загружаются по требованию. Но я не могу использовать виртуальный ListCtrl, потому что я также хочу расширить любое из 1,000,000 предметов, чтобы отображать его дочерние элементы (в элементах всегда будет меньше 50 детей). Это можно сделать эффективно с помощью TreeListCtrl? Или с другим классом? Из моих собственных экспериментов с treemixin.VirtualTree и wx.gizmos.TreeListCtrl перегрузка метода OnGetItemText работает не так, как с простым виртуальным ListCtrl. Он не получает запрос по требованию, когда пользователь прокручивается, то есть все 1000 000 элементов должны быть добавлены в TreeListCtrl заранее.wxPython: VirtualTreeListCtrl с миллионами элементов
ответ
Одна вещь, которую вы могли бы сделать, - опустить узлы в узлах и захватить событие expand-node. Затем вы проверяете, заполнены ли узлы узла. Если они нет, вы добавляете их перед расширением узла. Если они заполнены, вы просто игнорируете событие.
Вы правы, что treemixin не делает TreeListCtrl действительно виртуальным. Я думал об этом, когда я разрабатывал treemixin, но единственное, что я не знал, как решить, - это узнать, какие строки следует рисовать слева от элементов, когда пользователь смотрит на предметы, расположенные глубоко вниз по дереву, например. От 10000 до 10030. Если вы знаете решение для этого, я с удовольствием адаптирую treemixin.
Frank
Автор treemixin
Спасибо за создание treemixin! Но я не понимаю, что вы имеете в виду. Это чисто графическая проблема, или это проблема с отсутствующей информацией в базовой структуре данных? Вам просто нужно знать, сколько слоев в глубине узла, не так ли? – Darryl
Нет, просто создайте сложное дерево в случайном инструменте и посмотрите на вертикальные линии слева от случайного элемента. См. Http://www.sapdesignguild.org/community/IMAGES/explorer_tree.gif и представьте, что вам нужно только нарисовать «членство» в «защищенном». Линии слева зависят от структуры дерева над и под этими элементами. –
Я думаю, что я буду делать, это использовать виртуальный ListCtrl вместе с пропуском-лист для модели данных. Первоначально модель данных будет содержать 1 миллион узлов верхнего уровня. Когда узел расширяется, я могу вставлять его дочерние элементы в skip-list в log time (намного лучше, чем линейное время для массива). Я буду указывать имена детей в ListCtrl, чтобы вы могли визуально определить, кто их родитель. Я думаю, что время поиска журнала для skip-list (в отличие от момента мгновенного произвольного доступа для массива) будет достаточно быстрым, чтобы обрабатывать прокрутку пользователя. Если у кого-то есть лучшее предложение, пожалуйста, дайте мне знать. В будущем я расскажу о том, работает ли моя идея или нет.
- 1. wxPython - масштабирование элементов пользовательского интерфейса с окном?
- 2. Matlab: Экспортный сетчатый участок с 6 миллионами элементов в pdf
- 3. Как создать массив с 200 миллионами элементов в NodeJs?
- 4. Добавление элементов в wxpython combobox ...?
- 5. MongoDB с миллионами строк
- 6. javascript indexOf с миллионами совпадений
- 7. MySQL - рейтинг с миллионами записей
- 8. Работа с миллионами строк MySQL
- 9. Найти количество общих элементов между двумя списками или хешетами с миллионами элементов
- 10. Добавление элементов системного меню в wxPython/wxWidgets
- 11. Взаимодействие с пятью миллионами точек на экране
- 12. Добавление элементов в StaticBox в wxpython
- 13. WxPython: Выравнивание элементов в два boxsizers
- 14. wxPython Выберите несколько элементов одновременно. Listctrl
- 15. Алфавитный указатель с миллионами строк в redis
- 16. Сортировка элементов с помощью listctrl в Python и wxpython
- 17. Пользовательские Slider виджет с WxPython
- 18. Демо-код WxPython - передача объекта регистратора
- 19. bootstrapping с 10 миллионами реплик - недостаточно памяти
- 20. Сортировать таблицы с миллионами строк, LinQ соединение
- 21. Оптимизация запросов с миллионами строки в таблице
- 22. советы по работе с миллионами документов?
- 23. groupByKey с миллионами строк по ключевым
- 24. Hadoop backend с миллионами записей вставки
- 25. Эффективная индексация для БД с миллионами строк
- 26. обновить таблицу MySQL с миллионами строк
- 27. Дизайн базы данных с миллионами записей
- 28. Таблицы блокировки MySQL с миллионами строк
- 29. Сортировка больших файлов с миллионами строк
- 30. записи обновления на стол с миллионами записей
Это поможет, если на узел не так много узлов. Но в моем корневом узле подключено 1 миллион детей (т. Е. Во втором слое дерева есть 1 миллион узлов), а затем каждый из этих 1 миллионов человек имеет до 50 детей. Взять время, чтобы добавить 1 миллион суб-узлов к узлу слишком медленно. – Darryl
Простите любую путаницу, но у меня создалось впечатление, что вы можете использовать элемент управления виртуального дерева, чтобы нарисовать миллион подэлементов, но не их детей. Поэтому мое предложение состояло в том, чтобы использовать элемент управления виртуальным деревом для дочерних элементов корня, а затем перехватить события расширения узла для этих миллионов детей, чтобы добавить узлы. –