Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Февраль 06, 2016, 14:21



Название: Показать новые/измененные данные
Отправлено: Igors от Февраль 06, 2016, 14:21
Добрый день

Выполняется пытон скрипт созданный др приложением. Если переменные с таким пытон-именем уже есть в моем приложении, то они возможно редактируются (меняются поля данных), иначе создаются новые переменные. Имена всех измененных переменных и полей известны.

После того как скрипт отработал как удачно/лаконично показать юзеру что "это изменено - а это добавлено" с тем чтобы он мог принять или отменить рез-ты скрипта?

Спасибо


Название: Re: Показать новые/измененные данные
Отправлено: kambala от Февраль 06, 2016, 15:40
например, банально табличкой: переменная — старое значение (если переменная новая, пусто или not existed) — новое


Название: Re: Показать новые/измененные данные
Отправлено: Igors от Февраль 06, 2016, 16:00
например, банально табличкой: переменная — старое значение (если переменная новая, пусто или not existed) — новое
Разумно. Но тогда надо и редактировать давать, каким образом? Др совами что юзер должен сделать чтобы "принять новое" или "оставить старое"? И где/как будет видно принято/оставлено?


Название: Re: Показать новые/измененные данные
Отправлено: kambala от Февраль 06, 2016, 16:49
кнопочками save/discard (если всю форму сразу).

в табличке можно ввести еще один столбик с чекбоксами «apply» (по умолчанию все отмечены), ну а столбик «new value» сделать редактируемым.


Название: Re: Показать новые/измененные данные
Отправлено: Igors от Февраль 07, 2016, 06:44
кнопочками save/discard (если всю форму сразу).

в табличке можно ввести еще один столбик с чекбоксами «apply» (по умолчанию все отмечены), ну а столбик «new value» сделать редактируемым.
Хмм.. как-то это все начинает "раздуваться". Похоже дело-то не в UI, плохо продумана пресловутая "архитектура". Попробуем взглянуть ширше, вот больше подробностей

Я использую либу из приложения создающего пытон скрипты. (Де)сериализация (и в либе и в приложении) отсутствует, т.е. нет слива объектов в поток. Вместо этого оно пробегается по всем объектам и собирает их пытон имена. Надо признать, получается довольно компактно/красиво (один save для всех объектов). Найденные имена пишутся в .py файл, в нем это выглядит так 
Цитировать
obj = scene.getServiceManager().getService("steering")
if obj.getAttribute("addBoundaryWalls") != None :
   obj.setBoolAttribute("addBoundaryWalls",True)
else:
   attr = obj.createBoolAttribute("addBoundaryWalls", True, True, "Basic", 60, False, False, False, "Add")
   attr.setDefaultValue(True)
   attr.setValue(True)
Загрузка данных сводится к выполнению записанного .py файла. При этом если пытон создал новую переменную и/или поле данных, то она появляется и в С++ коде (ну конечно ее надо достать из контейнера по имени). А если данные уже существовали, они обновляются. Тоже здорово, с обычной сериализацией там долго пыль глотать.

Хорошо, но мне-то что делать? Вот юзер запустил .py скрипт, он мне чего-то изменил и/или чего-то добавил, как с этим разобраться? И undo никто не отменял, а что писать для undo? Вот подумал "предъявить юзеру все-все", и пусть он решает (ведь я тоже могу пробежаться по всем объектам/атрибутам). Но теперь вижу - это не очень хорошо. UI выходит не маленькое, а толку чуть - что юзер будет делать с  "addBoundaryWalls", о котором понятия не имеет?

Ваши предложения?


Название: Re: Показать новые/измененные данные
Отправлено: kambala от Февраль 07, 2016, 13:57
изначально речь шла о том, чтобы показать результаты скрипта и сохранить/отменить их — табличка с двумя кнопками.

дальше уже вылезло требование редактируемости результатов — ну ок, разрешаем редактирование столбца. обойтись можно и без чекбоксов в общем-то: просто смотреть было ли изменение значения, предоставленного скриптом (зависит от задачи).

теперь уже оказывается, что человек понятия не имеет о том, что там в скрипте происходит — тогда смысл ему вообще что-либо показывать? отработал скрипт, сразу применили изменения, юзер смотрит на визуальный результат: нравится — радуется, не нравится — жмет undo.
что юзер будет делать с  "addBoundaryWalls", о котором понятия не имеет?
можно ввести какой-то description питоновским переменным, чтоб юзер мог понять их назначение.


Название: Re: Показать новые/измененные данные
Отправлено: Bepec от Февраль 07, 2016, 14:46
Вместо всей это мутотени написать табличку "Переменные были изменены. Откатить?" Да/Нет :D

PS Igors не воспринимай несерьёзно, это реально решение всех твоих проблем. В каждой теме одно и то же, многосоставная жалоба на плохое чтение твоих мыслей :D


Название: Re: Показать новые/измененные данные
Отправлено: Igors от Февраль 07, 2016, 16:08
можно ввести какой-то description питоновским переменным, чтоб юзер мог понять их назначение.
имеются (в самой либе)

изначально речь шла ...
...
дальше уже вылезло требование редактируемости результатов ..
..
теперь уже оказывается, ..
Это нормальный процесс для любой приличной задачи. Если "все ясно" то и обсуждать нечего.
Требований пока никто не предъявляет, хочу редактирую - хочу нет, я решаю. Но надо сделать чтобы юзеру было удобно, и чтобы это место не пришлось переделывать.

Тут вот думаю - а что собсно делать для простейшего Cancel (когда скрипт уже был). Не только юзер, но и я не знаю что может быть в скрипте - на то он и скрипт, типа "в этом его сила". Это я так смело сказал "могу пробежаться". Но там писать немало, а главное - пробежка ничего не гарантирует. Переменные созданные в скрипте продолжают жить в пытоне, и хз что он там создаст. Как-то чистить пытоновский словарь - пару лет назад делал, там засада, пытон не удалит если на переменную есть ссылка. Как-то "грохнуть все" - ну в приложении это есть, по исходникам может и разберусь. Но тогда надо перегрузить свои данные (что были до скрипта), а это потянет загрузку файлов (ох многих). Не слабый получится "Cancel"

Мдаа.... не мала баба клопоту - купила питоновське порося  :'(


Название: Re: Показать новые/измененные данные
Отправлено: kambala от Февраль 07, 2016, 18:19
вот опять всплывают новые подробности :) почему нельзя все это сразу написать?

тема уже начинает переходить в питонскую (автозамена исправила на «пижонскую» :) ) специфику, не имеющую ничего общего с гуи.

может можно как-то сделать «слепок» состояния питона до запуска скрипта и откатиться к нему в случае отмены пользователем изменений, внесенных скриптом?


Название: Re: Показать новые/измененные данные
Отправлено: Racheengel от Февраль 07, 2016, 18:39
Достаточно будет таблицы с 3 столбиками:
Переменная - Старое значение - Новое значение

И кнопки Принять-Отменить. Все.
Негоже пользователю в детали вникать. Он либо принимает ВСЕ, либо НИЧЕГО. Иначе будут проблемы позже.


Название: Re: Показать новые/измененные данные
Отправлено: Bepec от Февраль 07, 2016, 23:42
Сча вылезет проблема количества переменных. ведь после допустим запуска 5 скриптов их может быть более сотни/тысячи. Как же бедный пользователь будет их смотреть? :P


Название: Re: Показать новые/измененные данные
Отправлено: Racheengel от Февраль 08, 2016, 00:47
Сча вылезет проблема количества переменных. ведь после допустим запуска 5 скриптов их может быть более сотни/тысячи. Как же бедный пользователь будет их смотреть? :P

а ему оно надо? в большинстве случаев он нажмет на ОК и забудет.


Название: Re: Показать новые/измененные данные
Отправлено: Bepec от Февраль 08, 2016, 02:31
Пути Igors неисповедимы, но вот только он никогда не останавливается, пока не будет смешано минимум пять вопросов :D


Название: Re: Показать новые/измененные данные
Отправлено: Igors от Февраль 08, 2016, 02:59
вот опять всплывают новые подробности :) почему нельзя все это сразу написать?
Напомню стартовую формулировку
Выполняется пытон скрипт созданный др приложением. Если переменные с таким пытон-именем уже есть в моем приложении, то они возможно редактируются (меняются поля данных), иначе создаются новые переменные. Имена всех измененных переменных и полей известны.
Что же потом всплыло/утонуло? :) По-моему ничего, просто дано больше подробностей/деталей, которые в стартовом посте были бы неуместны, длинные опусы обычно игнорируют.

может можно как-то сделать «слепок» состояния питона до запуска скрипта и откатиться к нему в случае отмены пользователем изменений, внесенных скриптом?
Это по-любому мне делать придется, пока не знаю как

тема уже начинает переходить в питонскую (автозамена исправила на «пижонскую» :) ) специфику, не имеющую ничего общего с гуи.
Ну как сказать... Если бы UI удачно легло/вписалось, то это значило бы что и с архитектурой/постановкой все норм. А сейчас это не так

Достаточно будет таблицы с 3 столбиками:
Переменная - Старое значение - Новое значение

И кнопки Принять-Отменить. Все.
Негоже пользователю в детали вникать. Он либо принимает ВСЕ, либо НИЧЕГО. Иначе будут проблемы позже.
Пытон переменные тоже классы/объекты, отделаться 3 столбиками никак не удается, там не хилое дерево выходит.

Логика ВСЕ/НИЧЕГО смысл имеет, (типа "пакет или прошел - или нет"). Принимая "по частям" наживаем себе проблем с несовместимостью значений. Но тогда чего предъявлять новое/старое? "На посмотри (на огромное дерево) но ничего не делай"?

С др стороны вообще ничего не показывать, сразу вывалить Принять-Отменить - опять я буду виноват, сразу же вопрос "а что я должен "Принять"? Кота в мешке?


Название: Re: Показать новые/измененные данные
Отправлено: Old от Февраль 08, 2016, 08:15
А что это за параметры, которые могут создавать/модифицировать скрипты?
Можно их как-то визуализировать, показать на демонстрационной модели: было - стало?


Название: Re: Показать новые/измененные данные
Отправлено: kambala от Февраль 08, 2016, 11:21
а есть вариант «спросить у заказчика / дизайнера / пользователей»?


Название: Re: Показать новые/измененные данные
Отправлено: Racheengel от Февраль 08, 2016, 13:55
Логика ВСЕ/НИЧЕГО смысл имеет, (типа "пакет или прошел - или нет"). Принимая "по частям" наживаем себе проблем с несовместимостью значений. Но тогда чего предъявлять новое/старое? "На посмотри (на огромное дерево) но ничего не делай"?

А все дерево не надо показывать. Показать что то типа "изменилось 10 переменных в 3 модулях".
Если кому будет интересно - по даблклику показать более детально.
Но 90% юзеров проигнорируют и нажмут Да-Нет.