LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 575|回复: 4

[不好意思,又来了.]一个gtk编程问题,请大家帮门,

[复制链接]
发表于 2004-12-21 20:11:07 | 显示全部楼层 |阅读模式
一个gtk编程问题,请大家帮门,

通过单击按钮来改变标签的文本。编译没问题,但运行时没反应..


#include <gtk\gtk.h>

void hello( GtkWidget *widget,gpointer   data )
{
    g_print ("Hello World\n");
}

void mychange(GtkWidget *label1)

{   char mystr[10]="welcome";
    gtk_label_set_text ( GTK_LABEL (label1) , mystr );

}
gint delete_event( GtkWidget *widget,GdkEvent  *event,gpointer   data )
{
    g_print ("delete event occurred\n");
    return TRUE;
}

void destroy( GtkWidget *widget,
              gpointer   data )
{
    gtk_main_quit ();
}

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

    GtkWidget *window;
    GtkWidget *button;
    GtkWidget *label1;
    GtkWidget *box;
   
    gtk_init (&argc, &argv);
   
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  
    g_signal_connect (G_OBJECT (window), "delete_event",G_CALLBACK (delete_event), NULL);
    g_signal_connect (G_OBJECT (window), "destroy",G_CALLBACK (destroy), NULL);
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
   
    box = gtk_hbox_new (TRUE, 1);
    label1 = gtk_label_new ("Hello!");
    button = gtk_button_new_with_label ("change");
        
    g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (mychange), NULL);
  /*  g_signal_connect_swapped (G_OBJECT (button), "clicked",G_CALLBACK (gtk_widget_destroy),window); */
   
    gtk_container_add (GTK_CONTAINER (window), box);
    gtk_box_pack_start (GTK_BOX (box), button, TRUE, TRUE, 1);
    gtk_box_pack_start (GTK_BOX (box), label1, TRUE, TRUE, 1);
   
    gtk_widget_show (box);
    gtk_widget_show (button);
    gtk_widget_show (label1);
    gtk_widget_show (window);
   
    gtk_main ();   
   
    return 0;
}
发表于 2004-12-21 22:46:15 | 显示全部楼层
你在编译程序时,最好也把警告选项打开
发表于 2004-12-22 08:52:16 | 显示全部楼层
mychange 函数声明有问题,缺少参数,用来传入你的label

button的信号连接错误,缺少参数,最后一个参数应该是label1,不时NULL
发表于 2004-12-22 16:44:21 | 显示全部楼层
知道错误在那就改呗 ,警告弄没在问
 楼主| 发表于 2004-12-22 20:33:05 | 显示全部楼层
问题解决了。dxzhang兄弟说得很有道理。改动了以下两处。

void mychange(GtkLabel *label1)

{
   gtk_label_set_text ( GTK_LABEL (label1) , "welcome" );
}

g_signal_connect_swapped (G_OBJECT (button), "clicked",G_CALLBACK (mychange), label1);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表