gtk_button_set_label(GTK_BUTTON(widget),"neues label");



  • hi

    Wie man an der Überschrifter erkenen habe ich probleme mit der funktion gtk_button_set_label, ich habe einen button mittels,

    button = gtk_button_new_with_label ("erstes label");
    

    erstellet und später ein signal angelegt,

    g_signal_connect (button, "clicked",
                            G_CALLBACK (callback), bla);
    

    und dann die callback funktion geschrieben

    static void 
    callback( GtkWidget *widget,
    		gpointer   data )
    {
    gtk_button_set_label(GTK_BUTTON(widget),"anderes label");//nach diesem befehl geht gar nichts mehr
    }
    

    und ab diesem zeitpunkt reagiert die gtk applikation nicht mehr, es wird weder ein fehler in der consol ausgeben, sonst passiert auch nichts. Die anderen threads die nichts mit gtk zu tun haben rennen weiter.

    mfg spjoe



  • sieht der prototyp fuer eine callback funktion nicht folgendermassen aus?

    gint callback_funktion(GtkWidget *widget, GdkEvent *event, gpointer x);
    

    und das casting wuerde ich so machen:
    fuer die callback funktion

    GTK_SIGNAL_FUNC()
    

    und dann noch den button auf

    GTK_OBJECT()
    

    casten!
    d.h:

    gtk_signal_connect (GTK_OBJECT(button), "clicked",
                        GTK_SIGNAL_FUNC(callback_funktion), NULL);
    

    dann muesst es eigentlich laufen

    ich weiss ja nicht aber ich glaube das ganze haengt davon ab dass der rueckgabe tuep gint sein muss!



  • --linuxuser-- schrieb:

    sieht der prototyp fuer eine callback funktion nicht folgendermassen aus?

    gint callback_funktion(GtkWidget *widget, GdkEvent *event, gpointer x);
    

    und das casting wuerde ich so machen:
    fuer die callback funktion

    GTK_SIGNAL_FUNC()
    

    und dann noch den button auf

    GTK_OBJECT()
    

    casten!
    d.h:

    gtk_signal_connect (GTK_OBJECT(button), "clicked",
                        GTK_SIGNAL_FUNC(callback_funktion), NULL);
    

    dann muesst es eigentlich laufen

    ich weiss ja nicht aber ich glaube das ganze haengt davon ab dass der rueckgabe tuep gint sein muss!

    Soweit ich weiß, wurde das signal-Konzept in die Glib ausgelagert.
    g_signal_connect() ist imho schon richtig, ebenso ist (GtkWidget *widget, gpointer data) auch richtig.

    Was ist denn `bla', vielleicht ist da was faul?

    Ansonsten überprüf mal ob *widget wirklich auf den Button zeigt, bei mir wird hier und da auch einfach mal NULL übergeben, bin leider noch nicht dahintergestiegen wann und warum das so ist..



  • bla hat nichts damit zu tun, dass is ja nur ein gpointer ( void * ), und mit dem macht er nichts anderes als sie an die callback funktion weitergeben.
    und in der callbackfunktion ist widget ein button.

    doe callback prototyp hängt vom signal ab, bei "clicked" ist die

    void        user_function                  (GtkButton *button,
                                                gpointer user_data);
    

    Juhu jetzt geht der Protoyp wars hab GtkWidget* statt Gtkbutton* genommen

    thx für die hilfe
    mfg spjoe


Anmelden zum Antworten