#lua #gtk
#lua #gtk
Вопрос:
Я создаю приложение, сильно зависящее от плагинов. Они закодированы на Lua для упрощения и ускорения разработки.
Теперь я хочу добавить пользовательские интерфейсы GTK для конфигураций плагина. Проблема прямо сейчас в том, что мне нужен способ взаимодействия с интерфейсом через внешний код (в основном сигналы и обратные вызовы). И я не уверен, как реализовать это поведение только с помощью внешнего скрипта Lua.
Правильный ли мой подход или я должен вместо этого реализовать собственное решение в моей платформе для пользовательского интерфейса?
Ответ №1:
Если вы используете linux или BSD, Lua — это идеальный выбор для GTK. Просто взгляните на проект lua-lgi. После установки вы можете приступить к созданию пользовательского интерфейса за считанные секунды:
lgi = require'lgi'
Gtk = lgi.require'Gtk'
dialog = Gtk.MessageDialog { text = 'This is a text message.', buttons = 'CLOSE' }
dialog:show_all()
Gtk.main()
Самой большой особенностью lgi
является то, что он работает для любой библиотеки на основе GObject, например cairo
, goffice
, gnome-db
и многих других.
Если вы используете Windows, вам не повезло. Я создал рабочий установщик, но это скорее проверка концепции, чем реальный проект. Путь к этому был действительно трудным, особенно потому, что gobject-introspection (широко используемый lgi
) еще не является кроссплатформенным.
У меня нет опыта работы с другими ОС.
Комментарии:
1. Я тоже рассматривал это, но моя проблема заключается не в создании пользовательского интерфейса на Lua, а в получении уже загруженного элемента пользовательского интерфейса, чтобы иметь возможность изменять его с помощью скрипта. Возможно ли это сделать?
2.
lua-lgi
предоставляет тот же API, что и в C: вы можете делать все, что в ваших силах, с простым GTK. Из того, что я понял из вашего запроса, вы можете легко получить виджеты изGtkBuilder
(т.е. из XML-файла, сгенерированного glade) и отредактировать их любым возможным способом.3. Если это так, то это, вероятно, лучший способ достичь моей цели. Единственная проблема — это кроссплатформенность, но мне придется поискать решения позже. Спасибо за помощь!