|
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
|
|
Обсуждаем, на чем лучше делать GUI для программ, написанных на Лисп, из предложенных вариантов14.04.2020, 13:14. Показов 2632. Ответов 19
Метки нет (Все метки)
Если среди этого есть варианты, не предназначенные на самом деле для создания GUI для программ на Лисп, то прошу подсказать, для чего тогда они?
https://common-lisp.net/project/mcclim/ http://www.peter-herth.de/ltk/ https://common-lisp.net/project/cl-gtk2/ https://common-lisp.net/project/cl-opengl/ https://sourceforge.net/projects/wxglade/ Как пытался установить wxGlade GUI Creator (в Windows XP не получилось, надо более позднюю операционную систему).
0
|
|
| 14.04.2020, 13:14 | |
|
Ответы с готовыми решениями:
19
Нужен совет на чем лучше делать GUI для frontend'a
Какой из предложенных ниже вариантов ноутбука лучше? |
|
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
| 14.04.2020, 13:34 | |
|
Люди в наше время пользуются qtools:
https://github.com/Shinmera/qtools По-моему, остальные графические библиотеки мёртвые. McCLIM представляет ностальгический интерес, но вряд ли его допилят до юзабельного состояния. Ещё можно делать браузерный интерфейс. А вообще, как говорится, емакс и есть GUI.
2
|
|
|
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|||
| 14.04.2020, 14:17 | |||
Он, говорят, опередил своё время.Кроме прочего, у лиспа (неудивительно) есть своя точка зрения на GUI - CLIM. К сожалению (а может быть, к счастью), работающего CLIMа нет. Добавлено через 16 минут
1
|
|||
|
Супер-модератор
|
||||||
| 14.04.2020, 14:19 | ||||||
|
Вот, к примеру, простой калькулятор на HomeLisp, который может работать не только с целыми и вещественными, но и с рациональными и комплексными. Код - под спойлером:
Кликните здесь для просмотра всего текста
Написал за 20 мин.
1
|
||||||
|
331 / 199 / 9
Регистрация: 12.05.2015
Сообщений: 334
|
|||
| 14.04.2020, 16:28 | |||
|
cl-gtk2 может быть но все же автор от него (и возможно от лиспа) отказался. И здесь хорошо бы определить для себя что понимать под GUI (есть варианты). И насколько winxp - вечный вариант. Добавлено через 2 минуты
0
|
|||
|
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
| 14.04.2020, 17:20 | |
|
В Ltk вроде бы тоже не наблюдается особого движения. Или там уже нечего улучшать? Вообще, для незамысловатого GUI она, наверно, лучше всего.
0
|
|
|
331 / 199 / 9
Регистрация: 12.05.2015
Сообщений: 334
|
|
| 14.04.2020, 17:52 | |
|
0
|
|
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
|
||
| 14.04.2020, 20:04 | ||
|
В Genera OS весь GUI на лиспе. Как и всё остальное, впрочем.
1
|
||
|
Заблокирован
|
|
| 14.04.2020, 22:29 | |
|
0
|
|
|
Заблокирован
|
|
| 15.04.2020, 12:02 | |
|
Catstail, это да) все конечно зависит от реализации. думаю на brainfuck писать GUI не очень, хотя он и тьюринг-полный)))
1
|
|
|
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
|
|
| 17.08.2020, 18:00 [ТС] | |
|
https://lispcookbook.github.io... k/gui.html
Ниже по ссылкам похоже то же самое https://lisp-journey.gitlab.io... 1-of-5-tk/ https://lisp-journey.gitlab.io... t4-qtools/ https://lisp-journey.gitlab.io... of-5-gtk3/ Остальные две части не искал.
0
|
|
|
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
| 17.08.2020, 20:18 | |
|
С удовольствием сделал на днях одну фигульку на LTK. До меня дошло, что вовсе необязательно запускать графический код внутри with-ltk. Этот макрос, даже с пустым телом, можно запустить в другом потоке, а в слаймовом потоке достаточно присвоить переменной `*wish*` значение этой переменной из того первого. Тогда можно запускать прямо в репле код навроде (pack (make-instance 'button)), и кнопка появится в прямом эфире. Это мне нравится.
С другой стороны, постоянно есть ощущение недоделанности этой библиотеки. Например, виджеты обычно создаются через make-instance, хотя символы типа make-frame экспортированы. Чтобы сбросить (flush) сообщения wish-у, не нашёл ничего лучшего, чем with-atomic. Чтобы создать стиль кнопок, пришлось отправлять tcl-код через send-wish (благо она экспортирована). Но это всё мелочи. Надо бы почаще пользоваться этой библиотекой, чтобы освоиться.
2
|
|
|
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
|
|
| 20.08.2020, 14:38 [ТС] | |
|
И видео урок по созданию GUI.
0
|
|
|
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
||||||||||||||||||
| 21.08.2020, 02:07 | ||||||||||||||||||
Сообщение было отмечено Catstail как решение
Решение
Ну, простое приложение сделать сравнительно несложно. Надо иметь в виду, что LTK организует RPC с тиклем, поэтому бояться тикля не нужно: приходится прибегать не только к его документации, но, бывает, и код вставлять. Это не расширение языка с графикой, а отдельная программа, которая умеет рисовать графику, и которой мы можем диктовать, что нарисовать. А она оповещает нас о происходящих событиях. Организовать такое общение - уже нетривиальная задача, поэтому если автор чего-то там недообернул - не стоит пенять, лучше дообернуть самому.
Лучшая документация LTK - исходный код. Вот простой пример из туториала: https://tkdocs.com/tutorial/firstexample.html
У меня получилось нижеследующим образом.
С winfo children (дети виджета) прокол: если её можно сделать в LTK, то я не нашёл, как. Зато вместо неё можно отправить строку на тикле! send-wish и format-wish экспортированы. Что в качестве :padding нужно указать именно "\"3 3 12 12\"", я выяснил экспериментальным путём, сравнивая с образцом текст, отправленный вишу. (Если присвоить *debug-tk* истину, общение будет логироваться в стандартный вывод.)Почему-то специальных конструкторов у классов нет. Может, автор наступил на какие-то грабли? run-ltk - моё ноу-хау, но в данном случае она фактически не пригодилась. А вообще, как я выше говорил, можно в прямом эфире общаться с tcl. Например, я пробовал сделать игрушечный текстовый редактор, в котором лисп был бы движком, и было удобно на ходу переопределять обработчики событий в репле без необходимости перезапускать окно. Это менее удобно, чем могло бы быть, так как, по-видимому, у нас нет доступа из лиспа ко всем текущим виджетам. Насколько понимаю, в тикле достаточно winfo children, чтобы обойти дерево виджетов. В лиспе, после того, как мы посадили виджет, мы не можем до него добраться, если никуда не сохранили - например, в глобальную переменную. Может, это сложно, организовать так как в тикле виджеты могут появляться/исчезать, и нужно следить, какие из лисповых объектов "протухли". А может, не очень и сложно. Хотя если бы удалось организовать динамическую интерактивную разработку, могло бы быть забавно.Добавлено через 6 минут К перечню недоделок: - текстовый виджет - нельзя работать, например, со строками, а можно только сетфить весь текст целиком; - стили ttk - вообще не поддерживаются. Но это можно на худой конец исправить через send-wish. А серьёзный косяк - передача лиспу событий клавиатуры. В процессе используется ридер, и атрибут char превращается в символ - причём, как положено, в верхнем регистре. То есть по дороге к лиспу теряется информация о регистре, и мы не узнаем, нажал ли пользователь "a" или "A". Исправить несложно, но без патча не обойтись, и это обратно несовместимое изменение, поломающее тонны написанного на LTK софта. Добавлено через 13 минут Но фундамент - хороший. По-моему, общение процессов реализовано добротно, полная интерактивность потенциально имеется. Остальное можно наращивать. Конечно, не питоновский tkinter, но тоже по-своему неплохо. Сравнить, например, с cl-cffi-gtk. Это, как по названию видно, FFI. Сишная. Ошибки в FFI не прощаются. Ошибся в каком-нибудь обработчике - получай нулевой указатель, библиотека отвалилась. При загрузке библиотека инициализируется, и повторно инициализировать её, наверно нельзя. Хотите продолжить - перегружайте лисп. В худшем случае сам лисп падает. Как если бы при разработке графического приложения падал бы графический сервер без возможности перезапуска или вся ОС целиком. Безумие. Но даже если бы FFI работал идеально, вряд ли можно было бы открыть пустое окно и налепить на него что угодно, а потом стереть и налепить другое. Это ж си.
1
|
||||||||||||||||||
|
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
|
||
| 21.08.2020, 02:11 [ТС] | ||
|
0
|
||
|
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|||||||||||
| 22.08.2020, 01:29 | |||||||||||
|
Не, главная проблема - я не очень представляю воркфлоу. Например, в репле можно выполнять по порядку следующие команды:
С другой стороны, я не знаю, важно ли на самом деле так переставлять кнопки в рантайме. Потом-то всё равно надо будет одним махом всё нарисовать - удобно ли этот код собирать из кусков? Пока непонятно. Что действительно полезно в рантайме - изменять обработчики событий. Для этого необязательно иметь доступ к виджетам. Если бы команды кнопок в моём примере были бы именованными функциями (или сводились бы к таковым), было бы достаточно переопределить эти функции.
2
|
|||||||||||
|
Заблокирован
|
||||||
| 22.08.2020, 11:56 | ||||||
|
Пример. Создает окно с меню и подменю. В принципе ничего сложного.
1
|
||||||
| 22.08.2020, 11:56 | |
|
Помогаю со студенческими работами здесь
20
Какая видеокарта лучше для процессора i7 пишим обсуждаем На чём делать резиновое GUI? На чём лучше всего писать GUI? Какая комплектация лучше и производительнее для игр из трех предложенных ? Выбрать ноутбук из предложенных вариантов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|