如何在gtk4中的笔记本之间手动移动页面

问题描述 投票:0回答:1

我正在开发一个使用 gtk 绑定 ui 元素的应用程序,但我不知道如何做到这一点,看起来应该很简单。 我希望能够将笔记本页面中包含的信息移动到另一个笔记本(例如将第 1 页从笔记本_1 移动到笔记本_2)。

我尝试使用以下代码片段来做到这一点:

page = gtk_notebook_get_current_page(notebook_1)
child = gtk_notebook_get_nth_page(notebook_1, page)

call gtk_notebook_remove_page(notebook_1, page)
label = gtk_label_new("Test")
nb = gtk_notebook_append_page(notebook_2, child, test)

当我尝试运行此程序时,控制台中出现错误:

(:87313):Gtk-CRITICAL **:19:58:29.515:gtk_notebook_append_page:断言“GTK_IS_WIDGET(子)”失败

nb为-1,表示操作失败。

我认为删除页面可能正在破坏子对象,所以我省略了该行。 但后来我在控制台中收到以下错误

(:87293):Gtk-警告**:19:56:50.684:GtkStack中重复的子名称:(空)

(:87293):Gtk-CRITICAL **:19:56:50.684:gtk_widget_set_parent:断言'_gtk_widget_get_parent(小部件)== NULL'失败

当我运行这个nb时,它不是-1,但是child中的信息没有显示在notebook_2中。

我觉得我在这里缺少一些基本的东西,但我不知道是什么。 我尝试了其他一些方法,例如将子项附加到滚动窗口,并且还使用 c 代码(而不是绑定)重现了错误。 如果有人有任何有关如何执行此操作的提示或有关如何进一步排除故障的指导,我将不胜感激。

gtk4
1个回答
0
投票

欢迎光临!

错误消息“gtk-notebook-append-page:断言‘GTK-IS-WIDGET (child)’失败”表示GtkWidget无法转换为GtkWidget。

因此,请检查所有GtkWidget是否都已创建为GtkWidget。

GtkWidget *child = gtk_....._new();

GtkWidget *label = gtk_label_new(); 等等。

如果要在函数中使用小部件,则必须进行相应的转换。

示例:

gtk_label_set_label(GTK_LABEL(标签),"我的文本");

需要更多代码才能进行更详细的故障排除。

祝你编程愉快。

© www.soinside.com 2019 - 2024. All rights reserved.