Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 15, 2018 14:05:12

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

DeWidgets - Qt5 виджеты на рабочий стол

Возьми и позапускай его на разных DM. Это будет для тебя полезным.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#2 Янв. 15, 2018 14:18:21

InterVi
Зарегистрирован: 2016-09-09
Сообщения: 49
Репутация: +  2  -
Профиль   Отправить e-mail  

DeWidgets - Qt5 виджеты на рабочий стол

Проект ещё не перешёл в стадию тестирования. Ты специально превращаешь тему в бесполезный флуд? Твои сообщения нисколько не помогают мне хотя бы приблизительно понять проблему, одни голословные утверждения.

Офлайн

#3 Янв. 15, 2018 15:16:59

InterVi
Зарегистрирован: 2016-09-09
Сообщения: 49
Репутация: +  2  -
Профиль   Отправить e-mail  

DeWidgets - Qt5 виджеты на рабочий стол

Пройдусь по тому, что было обработано. Что не упомянуто - то голословные придирки. Печально, что в теме больше критиканства, чем обоснованной критики, которая мне и нужна. В принципе, я уже доволен полученным результатом, некоторые конструктивные моменты оказались весьма полезными для развития проекта.

использование Qt Designer нет
Видимо имелось ввиду предложение подгружать *.ui файлы. Это лишь повысит “жирность” проекта, так как всё равно в коде будет setText, setToolTip, ивенты и так далее, он не станет меньше. Если же использовать конвертер, то его код не очень хорош и его удобство сомнительно. Текущая структура кода значительно удобнее - там сразу всё понятно, комменты для быстрого поиска. А сам редактор часто бывает не нужен, потому что интерфейсы довольно просты и легко верстаются на слоях без подгонки.

наследование от QDialog нет
Не ясно для чего это предлагалось. Окна справок - не диалоги.

gettext вместо конфигов локали нет
Километровые строки прямо в коде, в два раза больше в файлах локализации, отдельный конфиг с некоторыми параметрами. Недостатки перевешивают преимущества. Особенно это касается строк со справкой - сомневаюсь, что и переводчики оценили бы фетиш на данный стандарт.

использование системы локализации самого Qt нет
Нет, потому что она ведёт себя странно, на моей системе часто не работает. Хотя возможно я что-то делаю не так.

активация / деактивация кнопок да
Это удобнее, чем сообщения в нижней строке. Небыло сделано изначально по причине лени.

более удобное перетаскивание виджетов возможно
Режим редактирования и попиксельное выравнивание через специальное меню - действительно не лучшее решение. Возможно, в будущем появятся всплывающие боковые плашки, как в виджетах KDE.

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

использование модуля logging нет
Потоки stdout и stderr перенаправляются в файлы, чтобы весь выхлоп не пропадал. Поэтому туда же летят все стактрейсы. Кроме крашей и сообщений о запуске / завершении больше ничего не выводится, решено было не тащить лишний модуль, создавая лишнюю нагрузку и лишний лог файл.

декораторы для try-except нет
Идея хорошая, если бы не одно но - в некоторых местах при исключении происходит не только стак трейс. И количество таких мест иногда увеличивается. Декораторы усложнили бы процесс дописывания / переписывания кода, которое пока ещё часто случается. И усложнили бы сам код, для понимания которого пришлось бы распутывать более длинную цепочку, а так всё на виду. Ради экономии 2 строк кода - оно того не стоит, было решено не делать. Для API декораторы тоже сознательно не делались, потому что нет надобности обрабатывать события в нескольких местах, хватает обычного наследования.

вынос информации о виджете частично
Информация была вынесена в отдельный класс, а главный класс не инициализируется и не хранится если виджет не установлен на рабочий стол. Это позволяет экономить ощутимо больше ресурсов, когда установлены не все виджеты. И это удобнее опции загрузки только установленных. Правда, есть не критичные накладки из-за такой архитектуры. Хранить эту информацию в модуле не стал, так как потребовался бы более длинный валидатор и всё равно бы пришлось запихивать данные в класс, который будет хранится в словаре, поэтому лучше так, чем шаманить.

Отредактировано InterVi (Янв. 15, 2018 15:18:00)

Офлайн

#4 Янв. 15, 2018 18:43:13

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

DeWidgets - Qt5 виджеты на рабочий стол

Вот ты и сам понял что не готов воспринимать то что я тебе говорю. В этом нет ничего страшного, ты со временем сам поймёшь те вещи о которых я тебе говорил, ну если конечно выживешь.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Янв. 15, 2018 21:47:31

InterVi
Зарегистрирован: 2016-09-09
Сообщения: 49
Репутация: +  2  -
Профиль   Отправить e-mail  

DeWidgets - Qt5 виджеты на рабочий стол

Я не оспаривал сами подходы или стандарты, я их применяю в других программах, когда это уместно. Почему всё именно так - описал выше довольно подробно. Внятных аргументов за всю тему так и не увидел. Не можешь аргументировать - значит просто навязываешь свои личные предпочтения, направленные на код ради кода, а не код ради приемлемого выполнения задач. Не хочу продолжать этот глупый диалог, он похож на троллинг.

Офлайн

#6 Фев. 18, 2018 20:13:37

InterVi
Зарегистрирован: 2016-09-09
Сообщения: 49
Репутация: +  2  -
Профиль   Отправить e-mail  

DeWidgets - Qt5 виджеты на рабочий стол

За это время в проекте накопились довольно значительные изменения.

  • Много фиксов и рефакторинга. Работа с конфигом, локализацией, лок-файлом - были вынесены в отдельные модули.
  • Таки появился декоратор try_except. Главной причиной послужило то, что сторонние разработчики виджетов вряд ли вообще будут ловить ошибки (а эксепшен в правильном месте валит питон с сегфолтом), пусть для них будет простой инструмент. Но я по-прежнему считаю это плохим подходом.
  • Теперь используется модуль logging. Приложение стало выводить некоторую отладочную информацию (тоже по большей части для сторонних разработчиков), поэтому появилось надобность иметь возможность настраивать уровни логирования.
  • Появились панельки для перетаскивания виджетов. Но они пока маленькие и убогие, над ними ещё надо работать, хотя бы с визуальной частью. Ещё хотелось бы научить их масштабированию, как в KDE.

Ещё раз подумал над системой локализации. Удобство конфигов заключается в коротких ключах и в секциях, что делает возможным использование одинаковых ключей в разных местах. А ещё при добавлении сторонних виджетов в нужные конфиги записываются их секции с переводом, чтобы потом всё 1 раз грузилось из 1 файла. Хотя костыли всё равно потребуются, ибо вдруг у пользователя установлен язык, не поддерживаемый виджетом.

Использование другой системы локализации добавит костылей в код. Если брать gettext, то я скорее всего тоже использовал бы короткие ключи, что не есть хорошо. А писать тот же help, да ещё прямо в коде, тоже плохо. Насколько я понял, обычно используют родную систему Qt для перевода, даже QtDesigner генерирует свой говнокод с её использованием.

Пока подумываю оставить всё как есть. Потому что и так вполне удобно, нужно быть конченой макакой, чтобы не разобраться в соответствующем модуле и конфиге, если его потребуется перевести. Но может будут какие-нибудь конструктивные аргументы?

Вообще, хотелось бы больше мнений, проект близится к релизу.

Офлайн

#7 Фев. 19, 2018 23:43:20

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

DeWidgets - Qt5 виджеты на рабочий стол

InterVi
Не помню всех случаев, но если главное окно скрыто, приложение точно закроется при закрытии мессенджа.
Там все просто как доска.
1. когда ты закрываеш любое окно,генерируеться сигнал(или событие уже не помню точно) и главный обработчик событий проверяет остались ли открытые окна, если открытых окон нет то оно завершает основной цикл.
2. В случае же если используеться hide(), то сигнал не генерируеться, но окно скрываеться(читай закрывается), но основной цикл продолжает работать, и когда закрываеться другое окно, то читай пункт 1
соответвенно чтобы избежать завершения приложения при закрытии последнего окна нужно выполнить:
 ...
app = QtGui.QApplication(sys.argv)
app.setQuitOnLastWindowClosed(False)  
но соотвевенно нужно продумать комманду на завершение, по хоткею или пункту меню…



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Фев. 19, 2018 23:44:18)

Офлайн

#8 Фев. 20, 2018 09:48:29

InterVi
Зарегистрирован: 2016-09-09
Сообщения: 49
Репутация: +  2  -
Профиль   Отправить e-mail  

DeWidgets - Qt5 виджеты на рабочий стол

Есть пункт в контекстном меню и кнопка. И по крестику тоже. Благодарю, как всегда не дочитал документацию

Офлайн

#9 Фев. 20, 2018 10:29:38

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

DeWidgets - Qt5 виджеты на рабочий стол

по крестику оно закроет окно, но не завершит основной цикл, нужно явно вызывать QApplication.quit()



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#10 Фев. 20, 2018 14:42:08

InterVi
Зарегистрирован: 2016-09-09
Сообщения: 49
Репутация: +  2  -
Профиль   Отправить e-mail  

DeWidgets - Qt5 виджеты на рабочий стол

исправлено

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version