Форум сайта python.su
Здравствуйте.
Поменялся смысл сортировки, раньше искалось только по одному критерию за один раз теперь нужно что бы, искало по-одному, двум и более критериях одновременно.
1. Вопрос. Какую конструкцию использовать? При использовании if-else ищет но только один документ и только по одному критерию.
После того как выбрали данные которые интересуют отсортированные данные выводятся в таблицу. (Рис.1)
2. Вопрос. Как реализовать данную таблицу.
Можно наклепать entry и направлять данные в соответствии с их названием(предназначением). Тут вопрос 3. Как сделать так чтобы эти entry добавлялись столько сколько нужно, так как наделать 200 таких строк не целесообразно засоряет пространство.
Можно использовать таблицу.
Вопрос 4. Как ее сделать и как заставить прибавлять строки.
Может лучше сделать такую таблицу 8*100 сразу а чтобы не засоряла пространство оформить в какой-то Listbox со скролом. Но не будет ли это сильно загружать память?
Когда интересует один из многих найденных договоров двойным щелчком по его названию вызываем doc файл с этими всеми данными. Реализация такого вызова есть но там находит документ выводит его название в Listbox и при нажатии по-названию документа вызывается сам doc документ.
Надеюсь нормально изложил суть вопроса и Вы дадите ответ. )
Прикреплённый файлы:
Рис.1.PNG (32,2 KБ)
Офлайн
Хотите совет. Я бы поверх файлового поиска использовал бы какую-нибудь базу данных. В Вашем случае можно даже редис. Программа бы запускалась, обновляла данные в БД и потом просто работала с ней.
Если же это неподъемная задача, тогда нужно идти другим путем. Нужно работать на уровне словаря всех данных. И уже сортировки, выборки и т.п. делать по нему. Т.е. при запуске программы происходит сборка этого словаря (рекомендую OrderedDict) и потом уже его отображение. Включение сортировки приводит к перестроению таблицы (убиваем таблицу и строим новую). Насчет забивания памяти. Какое количество строк может максимально быть?
Офлайн
Количество около 200.
Офлайн
Тогда не будет зависания. У меня есть СУБД и там количество столбцов 8 и количество полей около 5-6 тысяч. Все нормально. Если уж очень хочется повысить продуктивность - можно реализовать постоянную подгрузку данных. Но я бы не рекомендовал. Сразу в разы усложнится возможность реализации скроллинга и т.п.
Офлайн
Кстати, забыл написать, для таких таблиц я использую свой враппер со связанными списками. Вот уже много лет. Поэтому тут самый простой вариант - связанные списки.
Офлайн
Посмотрел в код…я конечно тоже джун, но так еще не извращался)
if labMO.winfo_viewable(): # if (varMO.get() == 10): # MO = str(rb10['text']) # elif (varMO.get() == 20): # MO = str(rb20['text']) # elif (varMO.get() == 30): # MO = str(rb30['text']) # elif (varMO.get() == 40): # MO = str(rb40['text']) # elif (varMO.get() == 50): # MO = str(rb50['text']) # elif (varMO.get() == 60): # MO = str(rb60['text']) # elif (varMO.get() == 70): # MO = str(rb70['text']) # elif (varMO.get() == 80): # MO = str(rb80['text']) # elif (varMO.get() == 90): # MO = str(rb90['text']) # elif (varMO.get() == 100): # MO = str(rb100['text']) # elif (varMO.get() == 110): # MO = str(rb110['text']) # elif (varMO.get() == 120): # MO = str(rb120['text']) #
month = {key; value} search = varMO.det() if search in month.keys(): print (month[key])
Отредактировано saw_tooth (Дек. 12, 2014 16:56:19)
Офлайн
saw_tooth
Опишите, что задачи сортировки, и из каких данных вы их делаете, где и как их берете
Офлайн
Ну тогда предложенный мной вариант самый нормальный. Получаете список всех файлов и потом уже по нему работаете поисковым механизмом.
Офлайн
1.Получаем список файлов
2.Получаем в каждом файле атрибуты (созданы/изменен, имя, размер)
3. пишем все это в ini где:
- - имя файла
- key=value атрибут и значение
4. Запускаем в отдельном потоке синхронизацию, которая будет нашу базу обновлять исходя из папки через промежутки времени (20-30сек).
5. Пишем выборки.
6. Отображаем выборку на гуе.
Почему все так сложно? - потому что до конца не ясна задача, но это максимально простой а главное структуированный способ, на мое мнение. Как написали выше - СУБД была бы куда круче.
Многоуровневые выборки, лучше делать как И ИЛИ НЕ выражения в if операторе.
Сами выборки оформить в виде класса, а наследоваться от класса configparser, где методы - это ваши выборки, атрибуты - место ini файла и какие либо ваши другие параметры.
В гуи же оформить статическую шапку, и динамически создавать поля вывода, из выборок.
Сортировку, написать как пара методов в самом гуи, а точнее сортировка самих данных (типа, от начала месяца, от ранней даты, и т.п.) а потом выводить на экран.
Так сделал бы я, если я все правильно понял из ваших комментариев.
Офлайн
saw_tooth
1.Получаем список файлов
2.Получаем в каждом файле атрибуты (созданы/изменен, имя, размер)
3. пишем все это в ini где:
- - имя файла
- key=value атрибут и значение
4. Запускаем в отдельном потоке синхронизацию, которая будет нашу базу обновлять исходя из папки через промежутки времени (20-30сек).
5. Пишем выборки.
6. Отображаем выборку на гуе.
Офлайн