在回调函数中为notebook添加的新页无法显示
在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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不加这句怎么会显示呢~