gtk2 +glade +c gtk_label_set_text funktioniert nicht



  • Hallo,
    wie gesagt ich schreib in C hab gerade angefangen in glade mir eine einfache GUI zusammen zu clicken. Habe versuch dann in einem Label den Text zuändern, es kommt immer nur zwei Fehlermeldungen.

    main.c: In Funktion »on_button1_clicked«:
    main.c:84: Fehler: expected expression before »GtkLabel«
    main.c:84: Fehler: Zu wenige Argumente für Funktion »gtk_label_set_text«
    

    und so sieht mein Code aus:

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <string.h>
    #include <stdio.h>
    
    #include <config.h>
    
    #include <gtk/gtk.h>
    #include <glade/glade.h>
    
    /*
     * Standard gettext macros.
     */
    #ifdef ENABLE_NLS
    #  include <libintl.h>
    #  undef _
    #  define _(String) dgettext (PACKAGE, String)
    #  ifdef gettext_noop
    #    define N_(String) gettext_noop (String)
    #  else
    #    define N_(String) (String)
    #  endif
    #else
    #  define textdomain(String) (String)
    #  define gettext(String) (String)
    #  define dgettext(Domain,Message) (Message)
    #  define dcgettext(Domain,Message,Type) (Message)
    #  define bindtextdomain(Domain,Directory) (Domain)
    #  define _(String) (String)
    #  define N_(String) (String)
    #endif
    
    #include "callbacks.h"
    
    /* For testing propose use the local (not installed) glade file */
    /* #define GLADE_FILE PACKAGE_DATA_DIR"/einkaufsliste/glade/einkaufsliste.glade" */
    #define GLADE_FILE "einkaufsliste.glade"
    
    GtkWidget*
    create_window (void)
    {
    	GtkWidget *window;
    	GladeXML *gxml;
    
    	gxml = glade_xml_new (GLADE_FILE, NULL, NULL);
    
    	/* This is important */
    	glade_xml_signal_autoconnect (gxml);
    	window = glade_xml_get_widget (gxml, "window");
    
    	return window;
    }
    
    void on_button1_clicked(GtkButton*button,gpointer user_data) // Callback Funktion
    {
    	gchar txt[]="Anderer Text";
    	gchar *ptxt;
    	ptxt=&txt[0];
        g_print("Anderer Text\n");
    	gtk_label_set_text(GtkLabel*label, ptxt);
    }
    
    void on_button2_clicked(GtkButton*button,gpointer user_data) // Callback Funktion
    {
        g_print("Schließen\n");
    	gtk_main_quit();
    }
    
    int
    main (int argc, char *argv[])
    {
     	GtkWidget *window;
    
    #ifdef ENABLE_NLS
    	bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
    	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
    	textdomain (GETTEXT_PACKAGE);
    #endif
    
    	gtk_set_locale ();
    	gtk_init (&argc, &argv);
    
    	window = create_window ();
    	gtk_widget_show (window);
    
    	gtk_main ();
    	return 0;
    }
    


  • Hallo,

    natürlich funktioniert es nicht, wenn man es falsch benutzt. Du hast ja auch gar kein Label, wo du Text setzen könntest.

    So geht das:

    #include <gtk/gtk.h>
    
    /* Ein paar Testausgaben */
    static gchar *array[] = { "This is short",
    			  "But this one is a real looooooong one",
    			  "I'm just between the other two",
    			  "Look at me, I'll stretch the window once more ;-)",
    			  "And I'm even\nmultiline"
    };
    
    /* Unsere Applikation. Enthält einige Gtk-Komponenten*/
    typedef struct {
      GtkWidget *button, *label, *vbox, *window;  
    } Application;
    
    Application *app;
    
    /* Die zwei Signal-Funktionen */
    static void destroy(GtkWidget *w, gpointer data) {
      gtk_main_quit();
    }
    
    static void clicked(GtkWidget *widget, gpointer data) {
      static int i = 0;
      if (i > 4)
        i = 0;
    
      gtk_label_set_text(GTK_LABEL(app->label), array[i++]);
    }
    
    int main(int argc, char **argv) {
      gtk_init(&argc, &argv);
    
      app = malloc(sizeof(Application));
    
      /* GtkButton initalisieren */
      app->button = gtk_button_new();
      gtk_button_set_label(GTK_BUTTON(app->button), "OK");
    
      /* GtkLabel initalisieren */
      app->label = gtk_label_new("Click the button");
      gtk_label_set_single_line_mode(GTK_LABEL(app->label), FALSE);
    
      /* GtkVBox mit GtkButton und GtkLabel initalisieren */
      app->vbox = gtk_vbox_new(FALSE, 20);
    
      gtk_container_add(GTK_CONTAINER(app->vbox), app->button);
      gtk_container_add(GTK_CONTAINER(app->vbox), app->label);
    
      app->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title(GTK_WINDOW(app->window), "Test");
    
      /* GtkVBox zum GtkWindow hinzufügen */
      gtk_container_add(GTK_CONTAINER(app->window), app->vbox);
    
      /* Signal-Handler setzen */
      g_signal_connect(G_OBJECT(app->window),"destroy", G_CALLBACK(destroy), NULL);
      g_signal_connect(G_OBJECT(app->button),"clicked", G_CALLBACK(clicked), NULL);
    
      /* Und los geht die wilde Fahrt */
      gtk_widget_show_all(app->window);
    
      gtk_main();
    
      free(app);
    
      return 0;
    }
    

    Cheers

    GPC


Anmelden zum Antworten