gtk多标签窗口实现

⌚Time: 2022-12-25 19:16:55

👨‍💻Author: Jack Ge

GtkNotebook控件可以实现多标签切换窗口

在标签切换时会触发"switch-page"信号,对应的回调函数


void                user_function                      (GtkNotebook     *notebook,

                                                        GtkNotebookPage *page,

                                                        guint            page_num,

                                                        gpointer         user_data);

Emitted when the user or a function changes the current page.



notebook :



the object which received the signal.

page :



the new current page

page_num :



the index of the page

user_data :



user data set when the signal handler was connected.

测试代码


#include <gtk/gtk.h>

//页面切换回调函数

void on_switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data){

    //显示页面序号

    g_print("switched to page %d\n",page_num);

}

int main(int argc,char* argv[]){

    //gtk初始化函数

    gtk_init(&argc,&argv);

    GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    //窗体大小设置

    gtk_window_set_default_size(GTK_WINDOW(window),400,300);

    //新建notebook控件

    GtkWidget *noteBook = gtk_notebook_new();

    gtk_container_add(GTK_CONTAINER(window),noteBook);

    gtk_notebook_set_tab_pos(GTK_NOTEBOOK(noteBook),GTK_POS_RIGHT);

    //第0页

    GtkWidget *frame0 = gtk_frame_new("this is page 0");

    GtkWidget *label = gtk_label_new("Page0");

    //添加页面

    gtk_notebook_append_page(GTK_NOTEBOOK(noteBook),frame0,label);

    //第1页

    GtkWidget *frame1 = gtk_frame_new("this is page 1");

    label = gtk_label_new("Page1");

    //添加页面

    gtk_notebook_append_page(GTK_NOTEBOOK(noteBook),frame1,label);

    //设置当前页为第0页

    gtk_notebook_set_current_page(GTK_NOTEBOOK(noteBook),0);

    //连接信号回调函数

    g_signal_connect(G_OBJECT(noteBook),"switch-page",G_CALLBACK(on_switch_page),NULL);

    g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

    //显示窗口

    gtk_widget_show_all(window);

    //gtk主函数

    gtk_main();

    return 0;

}


效果