Найти - Пользователи
Полная версия: И снова сортировка
Начало » GUI » И снова сортировка
1 2 3 4
Yura_Lemeshko
Здравствуйте.
Поменялся смысл сортировки, раньше искалось только по одному критерию за один раз теперь нужно что бы, искало по-одному, двум и более критериях одновременно.
1. Вопрос. Какую конструкцию использовать? При использовании if-else ищет но только один документ и только по одному критерию.
После того как выбрали данные которые интересуют отсортированные данные выводятся в таблицу. (Рис.1)
2. Вопрос. Как реализовать данную таблицу.
Можно наклепать entry и направлять данные в соответствии с их названием(предназначением). Тут вопрос 3. Как сделать так чтобы эти entry добавлялись столько сколько нужно, так как наделать 200 таких строк не целесообразно засоряет пространство.
Можно использовать таблицу.
Вопрос 4. Как ее сделать и как заставить прибавлять строки.
Может лучше сделать такую таблицу 8*100 сразу а чтобы не засоряла пространство оформить в какой-то Listbox со скролом. Но не будет ли это сильно загружать память?

Когда интересует один из многих найденных договоров двойным щелчком по его названию вызываем doc файл с этими всеми данными. Реализация такого вызова есть но там находит документ выводит его название в Listbox и при нажатии по-названию документа вызывается сам doc документ.

Надеюсь нормально изложил суть вопроса и Вы дадите ответ. )
4kpt_II
Хотите совет. Я бы поверх файлового поиска использовал бы какую-нибудь базу данных. В Вашем случае можно даже редис. Программа бы запускалась, обновляла данные в БД и потом просто работала с ней.

Если же это неподъемная задача, тогда нужно идти другим путем. Нужно работать на уровне словаря всех данных. И уже сортировки, выборки и т.п. делать по нему. Т.е. при запуске программы происходит сборка этого словаря (рекомендую OrderedDict) и потом уже его отображение. Включение сортировки приводит к перестроению таблицы (убиваем таблицу и строим новую). Насчет забивания памяти. Какое количество строк может максимально быть?
Yura_Lemeshko
Количество около 200.
4kpt_II

Тогда не будет зависания. У меня есть СУБД и там количество столбцов 8 и количество полей около 5-6 тысяч. Все нормально. Если уж очень хочется повысить продуктивность - можно реализовать постоянную подгрузку данных. Но я бы не рекомендовал. Сразу в разы усложнится возможность реализации скроллинга и т.п.
4kpt_II
Кстати, забыл написать, для таких таблиц я использую свой враппер со связанными списками. Вот уже много лет. Поэтому тут самый простой вариант - связанные списки.
saw_tooth
Посмотрел в код…я конечно тоже джун, но так еще не извращался)

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'])		#

у вас есть значение, и ключ - используйте словарь предопределенный
в каждом if/else дергаете функцию - верните значение перед поиском
if/else - заменить switch/case (если уж вам так нравится ветвления) UPD1. Чет меня приплющило..в питоне ж нет свич/скейс…извиняюсь)))
дальше: ищем по ключам словаря где:

key = ваше значение переменной, value - название месяца (а не кнопки как у вас)
вообще, словарь нужно создать в самом начале, я считаю
и потом:
month = {key; value}
search = varMO.det()
if search in month.keys():
    print (month[key])

4 строки против ваших “макарон”…ну чесно слово…

Опишите, что задачи сортировки, и из каких данных вы их делаете, где и как их берете

ЗЫ: Разделите логику, и ГУИ, хотя бы в два модуля, ато не ясно где у вас что.
Yura_Lemeshko
saw_tooth
Опишите, что задачи сортировки, и из каких данных вы их делаете, где и как их берете

Изначально данные заполняются в главном окне программы, потом сохраняются в doc файл. Сортировка(поиск) нужных данных происходит поиском по-заданным параметрам в назначенной папке, просматриваются все сознанные файлы на наличие заданных параметров и если есть, выдает сходство в виде имен файлов в назначенном окно.
4kpt_II
Ну тогда предложенный мной вариант самый нормальный. Получаете список всех файлов и потом уже по нему работаете поисковым механизмом.
saw_tooth
1.Получаем список файлов
2.Получаем в каждом файле атрибуты (созданы/изменен, имя, размер)
3. пишем все это в ini где:
- - имя файла
- key=value атрибут и значение
4. Запускаем в отдельном потоке синхронизацию, которая будет нашу базу обновлять исходя из папки через промежутки времени (20-30сек).
5. Пишем выборки.
6. Отображаем выборку на гуе.

Почему все так сложно? - потому что до конца не ясна задача, но это максимально простой а главное структуированный способ, на мое мнение. Как написали выше - СУБД была бы куда круче.

Многоуровневые выборки, лучше делать как И ИЛИ НЕ выражения в if операторе.
Сами выборки оформить в виде класса, а наследоваться от класса configparser, где методы - это ваши выборки, атрибуты - место ini файла и какие либо ваши другие параметры.

В гуи же оформить статическую шапку, и динамически создавать поля вывода, из выборок.
Сортировку, написать как пара методов в самом гуи, а точнее сортировка самих данных (типа, от начала месяца, от ранней даты, и т.п.) а потом выводить на экран.

Так сделал бы я, если я все правильно понял из ваших комментариев.

4kpt_II
saw_tooth
1.Получаем список файлов
2.Получаем в каждом файле атрибуты (созданы/изменен, имя, размер)
3. пишем все это в ini где:
- - имя файла
- key=value атрибут и значение
4. Запускаем в отдельном потоке синхронизацию, которая будет нашу базу обновлять исходя из папки через промежутки времени (20-30сек).
5. Пишем выборки.
6. Отображаем выборку на гуе.

Охереть… Зачем ini? Писать нужно сразу тогда в БД. Зачем в отдельный поток синхронизацию?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB