在回调函数中为notebook添加的新页无法显示

发布于 2022-08-04 17:54:59 字数 3177 浏览 8 评论 1

在main中调用gtk_notebook_append_page()可以正常显示,但在回调函数中使用该函数则无法显示在notebook上,而使用gtk_notebook_get_n_pages查看notebook页数是正常的。
代码如下:

#include <gtk/gtk.h>
#include <string.h>

gint i=1;

void newpage(GtkWidget *widget,GdkEventButton *event,GtkWidget *notebook)
{
    if(event->type==GDK_2BUTTON_PRESS)
    {
        GtkWidget *textview,*label;
        char str[100];
        i++;
        sprintf(str,"新建文档 %d",i);
        g_print("%sn",str);
        label=gtk_label_new(str);
        textview=gtk_text_view_new();
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook),textview,label);
        gtk_widget_queue_draw(notebook);
    }   
}

void cb_btn(GtkWidget *widget,GtkWidget *notebook)
{

    GtkWidget *dialog,*window;
    gint n;
    n=gtk_notebook_get_n_pages(GTK_NOTEBOOK(notebook));

    window=gtk_widget_get_toplevel(widget);
    dialog=gtk_message_dialog_new(GTK_WINDOW(window),GTK_DIALOG_MODAL||GTK_DIALOG_NO_SEPARATOR,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,"当前共有%d页!",n);
    gtk_dialog_run(GTK_DIALOG(dialog));
    gtk_widget_destroy(dialog);
    g_print("%dn",n);
}

int main(int argc,char *argv[])
{
    GtkWidget *window,*vbox,*btn,*notebook,*textview,*label;

    gtk_init(&argc,&argv);

    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(window),400,300);

    notebook=gtk_notebook_new();
    textview=gtk_text_view_new();
    label=gtk_label_new("新建文档1");
    gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook),GTK_POS_TOP);
    gtk_notebook_append_page(GTK_NOTEBOOK(notebook),textview,label);

    vbox=gtk_vbox_new(TRUE,0);
    btn=gtk_button_new_with_label("查看page数量");
    gtk_box_pack_start(GTK_BOX(vbox),notebook,TRUE,TRUE,0);
    gtk_box_pack_start(GTK_BOX(vbox),btn,TRUE,TRUE,0);   
    g_signal_connect(G_OBJECT(btn),"clicked",G_CALLBACK(cb_btn),notebook);

     gtk_widget_show_all(window);

    g_signal_connect(G_OBJECT(window),"delete-event",G_CALLBACK(gtk_main_quit),NULL);
    g_signal_connect(G_OBJECT(notebook),"button_press_event",G_CALLBACK(newpage),notebook);
   
    gtk_main();
    return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泪眸﹌ 2022-08-13 03:35:09

不加这句怎么会显示呢~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文