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