免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2860 | 回复: 1
打印 上一主题 下一主题

在回调函数中为notebook添加的新页无法显示 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-19 14:22 |只看该作者 |倒序浏览
在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("%s\n",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("%d\n",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;
}

论坛徽章:
0
2 [报告]
发表于 2008-08-20 14:01 |只看该作者

gtk_container_add(GTK_CONTAINER(window),vbox);

不加这句怎么会显示呢~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP