Problem bei Ausgabe auf gtk_window
-
Hey leute, vielleicht kann mir einer bei meinem problem helfen. habe erst vor kurzem angefangen mich mit gtk in c zu beschäftigen, kann also sein, dass meine frage eine sehr banale für manche ist
also, unten seht ihr meinen quellcode: in der menüleiste meines fensters möchte ich mit dem menüpunkt "/Telefonbuch/TB Oeffnen" auf die funktion "tb_open" zugreifen. In dieser funktion wiederum würde ich gerne eine ausgabe mittels label auf meinem hauptfenster erscheinen lassen. dazu habe ich so eine vbox angelegt und hatte gehofft, dass ich diese auf meinem fenster ausgeben kann. allerdings erscheint keine ausgabe bei betätigen des menüpunkts.
meine frage also: wie bekomme ich über eine andere klasse ausgaben oder andere dinge, wie textfelder etc. auf mein hauptfenster "fenster", welches ich in meiner mainfunktion angelegt habe.hoffe, ihr versteht mein anliegen und vielen dank für eure hilfe
#include <stdlib.h> #include <gtk/gtk.h> GtkWidget tb_open(GtkWidget *widget); GtkWidget *menue_erzeugen(GtkWidget *fenster); static GtkWidget *fenster; /*Die Menüleiste*/ static GtkItemFactoryEntry menu_array[] = { { "/_Telefonbuch", NULL, NULL, 0, "<Branch>" }, { "/Telefonbuch/TB Oeffnen", "<control>O", tb_open, 0, NULL}, //hier rufe ich die funktion auf { "/Telefonbuch/Neu hinzufuegen", "<control>N", NULL, 0, NULL}, { "/Telefonbuch/Eintrag suchen", "<control>S", NULL, 0, NULL}, { "/Telefonbuch/sep1", NULL, NULL, 0, "<Separator>"}, { "/Telefonbuch/Beenden", "<control>B", gtk_main_quit, 0, NULL}, { "/_Optionen", NULL, NULL, 0, "<Branch>"}, { "/_Optionen/Info", NULL, NULL, 0, NULL}, { "/_Optionen/sep1", NULL, NULL, 0, "<Separator>"}, { "/_Optionen/Hilfe", "<control>H", NULL, 0, NULL}, }; GtkWidget *menue_erzeugen(GtkWidget *fenster) { GtkWidget *menueleiste; GtkItemFactory *itemfact; GtkAccelGroup *accelgroup; gint msize = sizeof(menu_array) / sizeof(menu_array[0]); accelgroup = gtk_accel_group_new(); itemfact = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", accelgroup); gtk_item_factory_create_items(itemfact, msize, menu_array, NULL); menueleiste = gtk_item_factory_get_widget(itemfact, "<main>"); return menueleiste; } void tb_open(GtkWidget *vbox) { GtkWidget *label; GtkWidget *labelbox; labelbox = gtk_vbox_new (FALSE, 0); //labelbox = gtk_event_box_new(); label = gtk_label_new("TB Oeffnen..."); //gtk_box_pack_start(GTK_BOX(labelbox), label, FALSE, TRUE, 0); gtk_container_add(GTK_CONTAINER(labelbox), label); gtk_container_add(GTK_CONTAINER (fenster), labelbox); gtk_widget_show(labelbox); gtk_widget_show(label); gtk_widget_show(fenster); } int main (int argc, char *argv[]) { GtkWidget *menueleiste; GtkWidget *hbox, *vbox; /* Initialize GTK+ */ gtk_init (&argc, &argv); /* Create the main window */ fenster = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_usize(GTK_WIDGET (fenster),400, 500); gtk_window_set_title (GTK_WINDOW (fenster), "TB"); gtk_window_set_position (GTK_WINDOW (fenster), GTK_WIN_POS_CENTER); g_signal_connect(GTK_OBJECT(fenster), "destroy", gtk_main_quit, NULL); /* Create a boxes */ vbox = gtk_vbox_new (FALSE, 0); hbox = gtk_hbox_new (FALSE, 0); gtk_container_add(GTK_CONTAINER (fenster), vbox); /*Menüleiste initialisieren*/ menueleiste = menue_erzeugen(fenster); gtk_box_pack_start(GTK_BOX(vbox), menueleiste, FALSE, TRUE, 0); gtk_widget_show(menueleiste); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); /* Enter the main loop */ gtk_widget_show_all (fenster); gtk_main (); return 0; }
-
hat denn niemand eine idee?
-
Vielleicht hätte ich eine, aber dein Code ist so nicht kompilierbar und ich will ja nicht alles selbst machen :). Schau dir nur mal die Deklaration von tb_open an und dann die Definition davon.
Generell gilt: Wenn du etwas auf das Hauptfenster (bzw. ein Control darin) schreiben willst, musst du eben einen Pointer darauf zur Verfügung stellen. Der einfachste weg ist ein globaler Pointer. Ein sauberer Weg ist dass man das in einer Funktion wegkapselt.