使用 Glade 时在 GTK-Notebook 中添加选项卡
Posted
技术标签:
【中文标题】使用 Glade 时在 GTK-Notebook 中添加选项卡【英文标题】:Adding a tab in a GTK-Notebook when using Glade 【发布时间】:2019-10-24 20:48:00 【问题描述】:我已经编写了一个 C 程序,并且正在研究 GTK 和 Glade 来构建一个 GUI,现在我被困了至少两天:
我需要一个带有一个标签的笔记本。此选项卡中有一个按钮,如果单击,则会添加一个新选项卡。
我发现:'gtk_notebook_append_page(notebook_pointer, tab_content_pointer, label)' 但无论我做什么都不起作用。特别是我不确定将什么作为 tab_content。我收到了三分之一的错误消息:它抱怨它是***的,无法获取父级,或者它已经有父级,或者无法插入新标签。
有谁知道在 glade 中用作 tab_content 的内容吗?或者知道一个我可以学习的例子吗?
或者我需要转储 glade 并用 C 代码编写所有内容吗?我找到了这方面的例子。
感谢您的帮助。
【问题讨论】:
我一直发现直接编写代码所花费的时间要少得多,而不是使用应该生成我想要的代码的工具。我有一个设置菜单,它与 Gtk+2 中的笔记本设置类似(代码在 Gtk+3 中基本相同)gtk_settings.c 对我来说,将 gui 的设计和代码中的功能分开是很有吸引力的。也许我必须用 C 代码编写这样的任务,然后看看我是否可以在这个 xml 接口中表示它。这个例子真的没什么特别的,在 Glade 中一定有一个表示。 我应该为您的设置而不是常规的笔记本设置做些什么? 不,设置没什么特别的,它只是通过 C 系统地构建笔记本。用 C 编写它的一个好处是您可以进行微调。例如/* table inside frame */
块和gtk_table_set_row_spacings (GTK_TABLE (table), 5);
(和col
)间距的微调。我以前用过 glade(绝对喜欢 glade2
,它生成的 C 代码提供了微调的起点)glate3
总是比它更麻烦,因为它依赖于额外的 css 进行微调。
应该提到的是,GtkTable 已经过时并且不推荐使用,应该改用 GtkGrid。
【参考方案1】:
用 Glade 画一个笔记本。如果您右键单击要更改的选项卡,则可以删除其内容。 (一个选项卡可以包含一个小部件,尽管您可以放入一个 HBox 或一个 Grid 来组合几个)。
删除后,您可以在其中插入任何其他小部件。这是一个例子:
带有笔记本的窗口。第一个标签内容已删除
Inserted 一个 Box,但默认情况下它是垂直的,所以...
我把属性改成水平了
我在第一个空间插入了一个图像小部件,在第二个空间插入了一个复选按钮。 (更改计算机的主题,使其更显眼。
如果您想从您的 C 代码添加页面,您也可以这样做,只需获取对笔记本的引用,然后修改选项卡内容。
作为说明,我建议您考虑使用 Python 作为 GUI 管理器。在 Gtk 和 C 中管理 GUI——无论是否使用 Glade——都是乏味的。网上有几个关于如何做到这一点的例子:
-Using Python GTK GUI front end with C++ backend
-How to use GTK+ 3 in Python to manage your whole application
这段代码在这里完美地添加了一个新标签:
notebook = GTK_WIDGET (gtk_builder_get_object (builder, "notebook1"));
if (!notebook)
g_critical ("Widget \"%s\" is missing in file %s.",
TOP_WINDOW, "notebook1");
tab_label = gtk_label_new ("New page's tab");
page_contents = gtk_label_new ("New page's contents");
gtk_notebook_append_page(notebook, page_contents, tab_label);
请注意,您必须将“notebook1”放在 Glade 中笔记本小部件的 ID 字段中。
【讨论】:
我没有发现画笔记本很难,但是,添加新页面不起作用。可能我没有对笔记本的有效参考。我编写的程序是用 C 编写的。我需要这个程序的表面。因此,Python 似乎不是一个好的选择。以上是关于使用 Glade 时在 GTK-Notebook 中添加选项卡的主要内容,如果未能解决你的问题,请参考以下文章
在 PyGObject 中使用 GtkSourceView 从 Glade 加载 GUI