图形化GTK程序是否有可能还有一个"命令行界面"类似GNU readline,editline或linenoise提供的那些?
如何处理阻止gtk_main()调用,以及阻止这些库中的循环步骤?
答案 0 :(得分:1)
绝对可以将GNU readline等库与图形程序集成。最简单的选择是生成一个专用于readline的线程,并使用g_idle_add
(这是线程安全的)与GUI线程进行通信。
如果您不想使用线程,可以使用GIO机制(g_io_channel_unix_new()
和g_io_add_watch()
)来指示GTK主循环通知您待处理的输入,并使用{调用readline {3}}设计用作事件循环回调。 Python的readline支持和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上 - 并且它不依赖于奥术终端代码来启动。