Определенно возможно интегрировать библиотеку, такую как GNU readline, с графической программой. Самый простой вариант - создать поток, выделенный для readline, и связаться с потоком GUI, используя g_idle_add
(который является потокобезопасным).
Если вы не хотите использовать темы, вы можете использовать технику GIO (g_io_channel_unix_new()
и g_io_add_watch()
) поручить основной цикл GTK уведомляет вас о рассмотрении ввода и вызывать Readline с помощью altnernate interface, предназначенной для использования в качестве цикла обработки событий обратного вызова , поддержка Readline Python и PyGTK использовать эти функции для того, чтобы следующие, все в одном потоке:
>>> import gtk
>>> w = gtk.Window()
>>> w.add(gtk.Label("foo"))
>>> w.show_all() # at this point, a window with label is shown
Другой вопрос, однако, является ли вы хочет программы щеголять интерфейс командной строки, основанный на эмуляция терминала в 21 веке. В GTK у вас есть многострочное средство редактирования, которое намного превосходит readline(), оно называется GtkTextView
. Это довольно просто (и, я могу добавить, весело), чтобы использовать его для создания средства командной строки, которое не имеет проблем с копированием, многострочным редактированием, Unicode, цветами, пропорциональными шрифтами, встроенными изображениями или рабочими на Windows - и который не полагается на тайные коды терминалов для загрузки.
Спасибо за ответы, я попробую это. Моя программа может быть настроена с помощью сценариев схемы. CLI может помочь мне легко отлаживать и тестировать эти сценарии и даже запускать программу без графического интерфейса. – azmeuk
@azmeuk Инфраструктура есть - если у вас есть рабочее понимание программирования, управляемого событиями, вы можете легко заставить readline и GTK сотрудничать. На мой взгляд, современная программа также должна поддерживать настоящий GUI REPL, который не зависит от эмуляции терминала, в виде консолей разработчика браузеров. – user4815162342