我想在 Gtk 中创建一个看起来像这样的窗口。 林间空地的小部件
顶部窗口的左窗格有一个标有“添加到列表”的按钮。我已经为这个按钮配置了回调,以将小部件“list_entry”添加到右侧窗格的 GtkListBox 中。在将小部件的标签从“标签”更改为出现在其上方的文本条目中的文本之后,它会这样做。所以,基本上这个按钮将一个新条目添加到放置在右窗格中的列表中(可能会被视为空)。此条目是一个简单的小部件,由一个图标和一个标签(在底部)组成。
现在,我希望“添加到列表”按钮在每次单击它时创建该条目的新副本,并将该条目附加到右窗格中的列表中。但是每次我在列表中添加一个新条目时,它都会简单地覆盖列表的前一个条目并给出警告-> 尝试将 GtkBox 类型的小部件添加到 GtkListBoxRow 类型的容器中,但小部件已经在容器内GtkListBoxRow 类型的,请先从其现有容器中删除小部件。
我将 GtkListBox 用于右窗格中的列表,并将 GtkBox 用于我应该添加的新条目。
这是按钮“添加到列表”的“点击”回调的代码
static void
dw_left_add_btn_cb(CcPrintersPanel * self){
GtkLabel* row_list_label = (GtkLabel*) gtk_builder_get_object (self->builder, "list_entry_label");
GtkEntry* text_entry_to_add = (GtkEntry*) gtk_builder_get_object (self->builder, "dw_left_enter_text");
// debug
if ( self->list_serv == NULL || row_list_label == NULL) g_debug ("One of object for generating the list did'nt load up in the builder");
gtk_label_set_label (row_list_label, gtk_entry_get_text (text_entry_to_add));
gtk_entry_set_text(text_entry_to_add,"");
GtkWidget* row_list = (GtkWidget*) gtk_builder_get_object (self->builder, "list_entry");
gtk_list_box_insert (self->list_serv, row_list, -1);
}
我想问您如何从使用 .ui 文件加载到 Builder 中的小部件创建一个全新的小部件(针对每个新条目)。如果您有其他实施方式,也请告诉我。