【问题标题】:GTK 3 NoteBook closing tabsGTK 3 NoteBook 关闭标签
【发布时间】:2022-01-04 23:15:43
【问题描述】:

我想要做的是通过添加到选项卡的按钮关闭 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");
}

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

【问题讨论】:

    标签: c gtk3 gtknotebook


    【解决方案1】:

    我发现解决方案是将页面的直接子项作为 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      相关资源
      最近更新 更多