0

我想要做的是通过添加到选项卡的按钮关闭 GTK 笔记本中的选项卡,但获取页码的功能似乎不起作用,看起来好像页面从最后创建的向后关闭。

void close_tab(GtkWidget *button, gpointer data){

  gint pg_num = gtk_notebook_page_num(GTK_NOTEBOOK(notebook), button);
  gtk_notebook_remove_page(GTK_NOTEBOOK(notebook) , pg_num);
}

void add_tab (char *name){

  GtkWidget *textview = gtk_text_view_new();
  GtkWidget *text = gtk_label_new(name);
  GtkWidget *label = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
  GtkWidget *icon = gtk_image_new_from_file ("close.png");
  GtkWidget *button = gtk_button_new();
  gtk_button_set_image(GTK_BUTTON(button), icon);
  gtk_widget_set_tooltip_text(button , "Close Tab");
  gtk_box_pack_start(GTK_BOX(label), text, TRUE, TRUE, 0);
  gtk_box_pack_start(GTK_BOX(label), button, FALSE, FALSE, 0);
  g_signal_connect(GTK_WIDGET(button), "clicked",
                                       G_CALLBACK(close_tab),
                                       NULL);
  GtkWidget *scrollwindow = gtk_scrolled_window_new(NULL, NULL);
  gtk_container_add(GTK_CONTAINER(scrollwindow), textview);
  gtk_notebook_append_page(GTK_NOTEBOOK(notebook), scrollwindow, label);

  gtk_widget_show_all(label);
  gtk_widget_show_all(scrollwindow);
}

void button_click(GtkWidget *button, gpointer data){
  char *btn = (char *) data;
  if (strcmp(btn, "New") == 0);
    add_tab("new tab");
}

我的实验是使用两个选项卡,第一个是自动使用“文本”标签作为“无标题”,第二个是“新标签”并尝试为按钮提供传递给添加选项卡功能的名称,但结果是一样的所以我不知道如何让按钮知道它属于哪个页面。

4

1 回答 1

0

我发现解决方案是将页面的直接子项作为 gpointer 数据传递,唯一可行的是滚动窗口。

删除选项卡功能更改

void close_tab(GtkWidget *button, gpointer data){
  int pg_num = gtk_notebook_page_num(GTK_NOTEBOOK(notebook), data);
  gtk_notebook_remove_page(GTK_NOTEBOOK(notebook) , pg_num);

}

以及添加选项卡功能内部的更改

  GtkWidget *scrollwindow = gtk_scrolled_window_new(NULL, NULL);
  gtk_container_add(GTK_CONTAINER(scrollwindow), textview);
  gtk_notebook_append_page(GTK_NOTEBOOK(notebook), scrollwindow, label);
  g_signal_connect(GTK_WIDGET(button), "clicked",
                                       G_CALLBACK(close_tab),
                                       scrollwindow);
于 2021-11-27T12:41:19.613 回答