GtkNotebook



  • Hallo
    ich habe ein GTKNOTEBOOK erstellt.
    mit
    if(i==0)
    schreib ich in das erste tab

    mit if==1
    ins 2te

    und mit if==2
    ins letze....

    in diesem Notebook ändere ich den text mit dem befehl

    g_snprintf(buf,BUF,"Seote 2");

    wie kann ich widgets in das notebook bekommen?

    mein code

    for(i=0; i < NBOOK; i++) {
          if(i==0)
          {
    g_snprintf(buf,BUF,"Seote 2");
    
              }
    else  if(i==1)
          {
             g_snprintf(buf,BUF,"Seote 2",i+1);
              }
              else
          {
             g_snprintf(buf,BUF,"Seote 3",i+1);
              }
    

    wäre nett mfg Dominik



  • zur besseren verständniss heir der ganze code

    #include <gtk/gtk.h>
    #define NBOOK 3
    #define BUF 35
    #define IMG 9
    #define TAB 3
    static gint
    delete_Event(GtkWidget *widget, GdkEvent event, gpointer daten) {
      g_print("Das Fenster wird zerstoert!\n");
      return FALSE;
    }
    static void end ( GtkWidget *widget, gpointer daten ) {
      g_print("Und tschuess!\n");
      gtk_main_quit();
    }
    int main(int argc, char **argv) {
      GtkWindow  *win;
       GdkPixbuf *ico;
    GtkImage   *image[IMG];
      GtkTable   *table[TAB];
      GtkNotebook *nbook;
      GtkLabel    *nbook_content[NBOOK],*nbook_titel[NBOOK];
    GtkLabel *version;
    
    GtkDrawingArea * draw;
      guint i;
      gchar buf[BUF];
      gtk_init( &argc, &argv );
    
    ico = gdk_pixbuf_new_from_file ("images/lmlogo.ico", NULL);
    image[1] = GTK_IMAGE(g_object_new( GTK_TYPE_IMAGE,
                            "file", "images/lmlogo.gif",
                            NULL));
    
      win = GTK_WINDOW(g_object_new( GTK_TYPE_WINDOW,
                          "title", "Lynax Messenger",
     "default-width", 250,
                          "default-height", 300,
                          "resizable", TRUE,
                          "window-position", GTK_WIN_POS_CENTER,
                          "border-width", 5, "icon", ico,
                          NULL ));
    GtkWidget*  gtk_drawing_area_new            (void);
    void        gtk_drawing_area_size           (GtkDrawingArea *darea,
                                                 gint width,
                                                 gint height);
    table[0] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
                            "n-columns", 2,
                            "n-rows", 1,
                            "column-spacing",0,
    "row-spacing",0,
                            NULL));
    table[1] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
                            "n-columns", 1,
                            "n-rows", 1,
                            "column-spacing",0,
    "row-spacing",0,
                            NULL));
    
    table[2] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
                            "n-columns", 1,
                            "n-rows", 1,
                            "column-spacing",0,
                            "row-spacing",0,
    
                            NULL));
    
      nbook = GTK_NOTEBOOK(g_object_new( GTK_TYPE_NOTEBOOK,
                            "enable-popup", TRUE,
    "show-border",TRUE,
    
                            NULL ));
    
      for(i=0; i < NBOOK; i++) {
          if(i==0)
          {
    g_snprintf(buf,BUF,"Seote 2");
    
              }
    else  if(i==1)
          {
             g_snprintf(buf,BUF,"Seote 2");
              }
              else if(i==2)
          {
             g_snprintf(buf,BUF,"Seote 3");
              }
    
                nbook_content[i] = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", buf,
                                         NULL));
    if(i==0){
    
          nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "ICQ/AIM/MSN SERVER",
                                         NULL ));
    }
    else  if(i==1)
          {
          nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "LM SERVER",
                                         NULL ));
          }
          else{
       nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "Hilfe",
                                         NULL ));
          }
    
        gtk_notebook_append_page_menu(nbook,
                                      GTK_WIDGET(nbook_content[i]),
    
                                      GTK_WIDGET(nbook_titel[i]),
    
                                      NULL);
      }
    
      g_signal_connect( win, "delete-event",
                        G_CALLBACK(delete_Event), NULL );
      g_signal_connect( win, "destroy",
                        G_CALLBACK(end), NULL );
    
    gtk_table_attach_defaults(GTK_TABLE(table[0]),GTK_WIDGET (table[1]), 0,1, 0,1);
    gtk_table_attach_defaults(GTK_TABLE(table[0]),GTK_WIDGET (table[2]), 1,2, 0,1);
    
    gtk_table_attach_defaults(GTK_TABLE(table[1]),GTK_WIDGET (image[1]), 0,1, 0,1);
    
    gtk_table_attach_defaults(GTK_TABLE(table[2]),GTK_WIDGET (nbook), 0,1, 0,1);
    
    gtk_container_add(GTK_CONTAINER(win), GTK_WIDGET(table[0]));
    
    gtk_widget_show_all( GTK_WIDGET(win) );
    
      gtk_main();
      g_print("Die GTK-Hauptschleife wurde beendet\n");
      return 0;
    }
    


  • Hi,

    mit gtk_notebook_append_page kannst du ja ein Child hinzufügen (==einen neuen Reiter). Füge als Child einen Container (HBox, VBox, Table) ein und da kannst du weitere "Children" reinhängen.

    Siehe auch hier: http://www.gtk.org/tutorial/x1452.html

    MfG

    GPC



  • danke aber irgentwie stell ich mich gerade weng an:
    meine for sieht nun so aus?;

    vbox = GTK_VBUTTON_BOX(g_object_new( GTK_TYPE_VBUTTON_BOX, NULL));
      for(i=0; i < NBOOK; i++) {
    
     nbook_content[i] = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", buf,
                                         NULL));
    
    if(i==0){
          nbook_content[i] = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "d",
                                         NULL));
    
          nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "ICQ/AIM/MSN SERVER",
                                         NULL ));
    }
    else  if(i==1)
          {
          nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "LM SERVER",
                                         NULL ));
          }
          else{
       nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "Hilfe",
                                         NULL ));
          }
    
        gtk_notebook_append_page_menu(nbook,
                                      GTK_WIDGET(nbook_content[i]),
    
                                      GTK_WIDGET(nbook_titel[i]),
    
                                      NULL);
        gtk_notebook_append_page(nbook,
                                      GTK_WIDGET(vbox),
    
                                      GTK_WIDGET(nbook_titel[i]),
    
                                      NULL);
    
      }
    
    C:/gtk/libs/gtk/include/gtk-2.0/gtk/gtknotebook.h:123: error: too many arguments to function `gint gtk_notebook_append_page(GtkNotebook*, GtkWidget*, GtkWidget*)'
    


  • gtk_notebook_append_page(nbook,
                                      GTK_WIDGET(vbox),
    
                                      GTK_WIDGET(nbook_titel[i]),
    
                                      NULL);
    

    Du übergibst vier Parameter.

    C:/gtk/libs/gtk/include/gtk-2.0/gtk/gtknotebook.h:123: error: too many arguments to function `gint gtk_notebook_append_page(GtkNotebook*, GtkWidget*, GtkWidget*)'

    Erwartet werden drei Parameter.

    Im Übrigen würde ich dir empfehlen, den Code vernünftig einzurücken. Das kann so ja keiner lesen.



  • am achso also ist

    gtk_notebook_append_page
    dasselbe wie
    gtk_notebook_append_page_menu



  • okay etz hab ich es fast so wie ich will:

    vbox = GTK_VBUTTON_BOX(g_object_new( GTK_TYPE_VBUTTON_BOX, NULL));
      for(i=0; i < NBOOK; i++) {
    
     nbook_content[i] = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", buf,
                                         NULL));
    
    if(i==0){
        gtk_box_pack_start_defaults( GTK_BOX(vbox),
                                     GTK_WIDGET(image[2]));
    
          nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "ICQ/AIM/MSN SERVER",
                                         NULL ));
    }
    else  if(i==1)
          {
          nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "LM SERVER",
                                         NULL ));
                                         gtk_box_pack_start_defaults( GTK_BOX(vbox),
                                     GTK_WIDGET(image[3]));
          }
          else{
       nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "Hilfe",
                                         NULL ));
          }
    
        gtk_notebook_append_page_menu(nbook,
                                      GTK_WIDGET(vbox),
    
                                      GTK_WIDGET(nbook_titel[i]),
    
                                      NULL);
    
      }
    

    nur zeigt er egal ob if oder nciht alle widgets in der box an obwohl ich das in die box packen in einer if gemacht habe



  • Nein, sonst gäbe es keine zwei Methoden.
    Beide fügen einem GtkNotebook einen neuen Reiter ("Tab") hinzu, aber gtk_notebook_append_page_menu erwartet eben noch einen Parameter mehr, der ein Widget darstellt, welcher im Tab-Switch Menü (sofern das angestellt ist) erscheint.

    Besser ist es, du verwendest die normale gtk_notebook_append_page Funktion.



  • so gut etz muss ich nur noch das hinbekommen das er egal ob es nun eine box oder eine tabelle ist , das er unterschiedlich die pack

    for(i=0; i < NBOOK; i++) {
    
    if(i==0){
    
    gtk_table_attach_defaults(GTK_TABLE(table[3]),GTK_WIDGET (image[3]), 0,1, 0,1);
    
          nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "ICQ/AIM/MSN SERVER",
                                         NULL ));
    }
    else if(i==1)
          {
    
          nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "LM SERVER",
                                         NULL ));
    
          }
          else if(i==2)
          {
       nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "Hilfe",
                                         NULL ));
          }
    
        gtk_notebook_append_page_menu(nbook,
                                      GTK_WIDGET(table[3]),
    GTK_WIDGET(nbook_titel[i]),
                                      NULL);
    
      }
    

    warum berücksichtigt er nicht die if weil ers soll hat je nach dem i also tab unterschiedliche widgets in die tabelle packen aber er berücksichtigt die ifs nicht

    ich glaub die if ist falsch...



  • Ich verstehe dein Problem nicht ganz. Und das verstehe bezieht sich sowohl auf dein Versuch, es zu beschreiben als auch auf deine Frage... du erstellst in jedem if ein Label, welches du dann hinzufügen willst. Was bezweckst du denn?



  • also ich möchte es so:

    wenn man auf den ersten tab drück möchte ich das die tabelle=inhalt des notbooks
    das bekommt
    gtk_table_attach_defaults(GTK_TABLE(table[3]),GTK_WIDGET (image[3]), 0,1, 0,1);
    beim 2ten tab soll wieder eine andere inhalt in den table kommen

    die label sind ok die machen oben die namen von den tabs
    nur der inhalt soll sich eben auch ändern, nur bleibt er bei allen 3 tabs gleich...

    also oegal ob ich tab 1 oder tab 3 auswähle es kommt immer der inhalt
    gtk_table_attach_defaults(GTK_TABLE(table[3]),GTK_WIDGET (image[3]), 0,1, 0,1);



  • LM schrieb:

    wenn man auf den ersten tab drück möchte ich das die tabelle=inhalt des notbooks
    das bekommt
    gtk_table_attach_defaults(GTK_TABLE(table[3]),GTK_WIDGET (image[3]), 0,1, 0,1);
    beim 2ten tab soll wieder eine andere inhalt in den table kommen

    Das wird so nicht funktionieren. Du hast eine falsche Vorstellung von Tabs. Jedes Tab ist ein eigener Container (bzw. kann einer sein), das Notebook versteht sich als Container der Tabs... und NUR der Tabs.

    Kurz: Dein Ansatz ist falsch.

    die label sind ok die machen oben die namen von den tabs
    nur der inhalt soll sich eben auch ändern, nur bleibt er bei allen 3 tabs gleich...

    Geh hin und füge jedem Tab seinen eigenen Table hinzu. So, dann kannst du auf jedem Table operieren.

    also oegal ob ich tab 1 oder tab 3 auswähle es kommt immer der inhalt

    Jo, logisch.



  • Geh hin und füge jedem Tab seinen eigenen Table hinzu. So, dann kannst du auf jedem Table operieren.

    ja wie den;)

    for(i=0; i < NBOOK; i++) {
    
    if(i==0)
        {
     nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "ICQ/AIM/MSN SERVER",
                                         NULL ));
        }
    else if(i==1)
        {
    
          nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "LM SERVER Einstellungen",
                                         NULL ));
        }
          else if(i==2)
          {
       nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "Hilfe",
                                         NULL ));
    
     }
        gtk_notebook_append_page_menu(nbook,
                                      GTK_WIDGET(table[3]),
    GTK_WIDGET(nbook_titel[i]),
                                      NULL);
    
      }
    

    🙄 🙄 🙄

    so ist der table atach aufgebaut

    gtk_table_attach_defaults(GTK_TABLE(table[3]),GTK_WIDGET (image[2]), 0,1, 0,1);

    so?

    gtk_notebook_append_page_menu(nbook,
                                      GTK_WIDGET(table[0]),
    GTK_WIDGET(nbook_titel[0]),
                                      NULL);
                                          gtk_notebook_append_page_menu(nbook,
                                      GTK_WIDGET(table[1]),
    GTK_WIDGET(nbook_titel[1]),
                                      NULL);
                                          gtk_notebook_append_page_menu(nbook,
                                      GTK_WIDGET(table[2]),
    GTK_WIDGET(nbook_titel[2]),
                                      NULL);
    

    GRU? DOminik



  • Geh hin und füge jedem Tab seinen eigenen Table hinzu. So, dann kannst du auf jedem Table operieren.

    ja wie den;)

    Okay: Folgendes Vorgehen:
    1. Du erstellst ein Notebook.
    2. Du erstellst n H oder VBoxes, je nach dem was du brauchst. n ist die Anzahl. Bisher waren's drei.
    3. Du erstellst n Tables oder sonstige Container.
    4. Du fügst die Tables in die HBoxes ein (add, pack_start, such dir was aus)
    5. Du fügst mittels append_page die HBoxes zum Notebook hinzu. Glaub mir, das geht.

    Irgendwie werde ich das Gefühl nicht los, du solltest dich erst mit den Grundlagen von C bzw. C++ und OOP beschäftigen, bevor du dich in GTK+ stürzt. Oder zumindest das GTK+ Tutorial lesen. Das ist gut, wirklich.



  • hm das hab ich doch gemacht?

    hbutbox[0] = GTK_HBUTTON_BOX(g_object_new( GTK_TYPE_HBUTTON_BOX, NULL));
      hbutbox[1] = GTK_HBUTTON_BOX(g_object_new( GTK_TYPE_HBUTTON_BOX, NULL));
       hbutbox[2] = GTK_HBUTTON_BOX(g_object_new( GTK_TYPE_HBUTTON_BOX, NULL));
    
    gtk_box_pack_start_defaults( GTK_BOX(hbutbox),
                                     GTK_WIDGET(table[3]));
                                     gtk_box_pack_start_defaults( GTK_BOX(hbutbox),
                                     GTK_WIDGET(table[4]));
                                     gtk_box_pack_start_defaults( GTK_BOX(hbutbox),
                                     GTK_WIDGET(table[5]));
    
             gtk_table_attach_defaults(GTK_TABLE(table[3]),GTK_WIDGET (image[2]), 0,1, 0,1);
     gtk_table_attach_defaults(GTK_TABLE(table[4]),GTK_WIDGET (image[2]), 0,1, 0,1);
      gtk_table_attach_defaults(GTK_TABLE(table[5]),GTK_WIDGET (image[2]), 0,1, 0,1);
    
      nbook = GTK_NOTEBOOK(g_object_new( GTK_TYPE_NOTEBOOK,
                            "enable-popup", TRUE,
    "show-border",TRUE,
    
                            NULL ));
    
      for(i=0; i < NBOOK; i++) {
    
    if(i==0)
        {
    
     nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "ICQ/AIM/MSN SERVER",
                                         NULL ));
        }
    else if(i==1)
        {
    
          nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "LM SERVER Einstellungen",
                                         NULL ));
        }
          else if(i==2)
          {
    
       nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "Hilfe",
                                         NULL ));
    
     }
        gtk_notebook_append_page_menu(nbook,
                                      GTK_WIDGET( hbutbox[0]),
    GTK_WIDGET(nbook_titel[0]),
                                      NULL);
                                          gtk_notebook_append_page_menu(nbook,
                                      GTK_WIDGET (hbutbox[1]),
    GTK_WIDGET(nbook_titel[1]),
                                      NULL);
                                          gtk_notebook_append_page_menu(nbook,
                                      GTK_WIDGET( hbutbox[2]),
    GTK_WIDGET(nbook_titel[2]),
                                      NULL);
      }
    


  • Öhm. Nun, poste mal bitte eine aktuelle, lauffähige und vollständige Version des Codes.



  • :

    #include <gtk/gtk.h>
    #include <Test-DLL.h>
    #define NBOOK 3
    #define BUF 235
    #define IMG 9
    #define TAB 6
    static gint
    delete_Event(GtkWidget *widget, GdkEvent event, gpointer daten) {
      g_print("Das Fenster wird zerstoert!\n");
      return FALSE;
    }
    static void end ( GtkWidget *widget, gpointer daten ) {
      g_print("Und tschuess!\n");
      gtk_main_quit();
    }
    int main(int argc, char *argv[]) {
          SomeFunction("Das Programm ist in der Beta PHASE!");
      GtkWindow  *win;
       GdkPixbuf *ico;
    GtkImage   *image[IMG];
      GtkTable   *table[TAB];
        GtkHButtonBox *hbutbox[3];
      GtkNotebook *nbook;
      GtkLabel    *nbook_titel[NBOOK];
    
    GtkLabel *version;
      GtkVButtonBox *vbox;
    
      guint i;
      gchar buf[BUF];
      gtk_init( &argc, &argv );
    
    ico = gdk_pixbuf_new_from_file ("images/lmlogo.ico", NULL);
    image[1] = GTK_IMAGE(g_object_new( GTK_TYPE_IMAGE,
                            "file", "images/lmlogo.gif",
                            NULL));
                            image[2] = GTK_IMAGE(g_object_new( GTK_TYPE_IMAGE,
                            "file", "images/lmlogo.gif",
                            NULL));
                                  image[3] = GTK_IMAGE(g_object_new( GTK_TYPE_IMAGE,
                            "file", "images/lmlogeo.gif",
                            NULL));
    
      win = GTK_WINDOW(g_object_new( GTK_TYPE_WINDOW,
                          "title", "Lynax Messenger",
     "default-width", 250,
                          "default-height", 300,
                          "resizable", TRUE,
                          "window-position", GTK_WIN_POS_CENTER,
                          "border-width", 5, "icon", ico,
                          NULL ));
    GtkWidget*  gtk_drawing_area_new            (void);
    void        gtk_drawing_area_size           (GtkDrawingArea *darea,
                                                 gint width,
                                                 gint height);
    table[0] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
                            "n-columns", 2,
                            "n-rows", 1,
                            "column-spacing",0,
    "row-spacing",0,
                            NULL));
    table[1] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
                            "n-columns", 1,
                            "n-rows", 1,
                            "column-spacing",0,
    "row-spacing",0,
                            NULL));
    
    table[2] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
                            "n-columns", 1,
                            "n-rows", 1,
                            "column-spacing",0,
                            "row-spacing",0,
    
                            NULL));
    
            table[3] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
                            "n-columns", 1,
                            "n-rows", 1,
                            "column-spacing",0,
                            "row-spacing",0,
    
                            NULL));
    
    table[4] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
                            "n-columns", 1,
                            "n-rows", 1,
                            "column-spacing",0,
                            "row-spacing",0,
    
                            NULL));
    table[5] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
                            "n-columns", 1,
                            "n-rows", 1,
                            "column-spacing",0,
                            "row-spacing",0,
            NULL));
    
     hbutbox[0] = GTK_HBUTTON_BOX(g_object_new( GTK_TYPE_HBUTTON_BOX, NULL));
      hbutbox[1] = GTK_HBUTTON_BOX(g_object_new( GTK_TYPE_HBUTTON_BOX, NULL));
       hbutbox[2] = GTK_HBUTTON_BOX(g_object_new( GTK_TYPE_HBUTTON_BOX, NULL));
    
    gtk_box_pack_start_defaults( GTK_BOX( hbutbox[0]),
                                     GTK_WIDGET(table[3]));
    
                                     gtk_box_pack_start_defaults( GTK_BOX( hbutbox[1]),
                                     GTK_WIDGET(table[4]));
    
                                     gtk_box_pack_start_defaults( GTK_BOX( hbutbox[2),
                                     GTK_WIDGET(table[5]));
    
             gtk_table_attach_defaults(GTK_TABLE(table[3]),GTK_WIDGET (image[2]), 0,1, 0,1);
     gtk_table_attach_defaults(GTK_TABLE(table[4]),GTK_WIDGET (image[2]), 0,1, 0,1);
      gtk_table_attach_defaults(GTK_TABLE(table[5]),GTK_WIDGET (image[2]), 0,1, 0,1);
    
      nbook = GTK_NOTEBOOK(g_object_new( GTK_TYPE_NOTEBOOK,
                            "enable-popup", TRUE,
    "show-border",TRUE,
    
                            NULL ));
    
      for(i=0; i < NBOOK; i++) {
    
    if(i==0)
        {
    
     nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "ICQ/AIM/MSN SERVER",
                                         NULL ));
        }
    else if(i==1)
        {
    
          nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "LM SERVER Einstellungen",
                                         NULL ));
        }
          else if(i==2)
          {
    
       nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
                                         "label", "Hilfe",
                                         NULL ));
    
     }
        gtk_notebook_append_page_menu(nbook,
                                      GTK_WIDGET( hbutbox[0]),
    GTK_WIDGET(nbook_titel[0]),
                                      NULL);
                                          gtk_notebook_append_page_menu(nbook,
                                      GTK_WIDGET (hbutbox[1]),
    GTK_WIDGET(nbook_titel[1]),
                                      NULL);
                                          gtk_notebook_append_page_menu(nbook,
                                      GTK_WIDGET( hbutbox[2]),
    GTK_WIDGET(nbook_titel[2]),
                                      NULL);
      }
    
      g_signal_connect( win, "delete-event",
                        G_CALLBACK(delete_Event), NULL );
      g_signal_connect( win, "destroy",
                        G_CALLBACK(end), NULL );
    
    gtk_table_attach_defaults(GTK_TABLE(table[0]),GTK_WIDGET (table[1]), 0,1, 0,1);
    gtk_table_attach_defaults(GTK_TABLE(table[0]),GTK_WIDGET (table[2]), 1,2, 0,1);
    
    gtk_table_attach_defaults(GTK_TABLE(table[1]),GTK_WIDGET (image[1]), 0,1, 0,1);
    
    gtk_table_attach_defaults(GTK_TABLE(table[2]),GTK_WIDGET (nbook), 0,1, 0,1);
    
    gtk_container_add(GTK_CONTAINER(win), GTK_WIDGET(table[0]));
    
    gtk_widget_show_all( GTK_WIDGET(win) );
    
      gtk_main();
      g_print("Die GTK-Hauptschleife wurde beendet\n");
    
      return 0;
    }
    


  • Der Code war nicht lauffähig!

    Nach der Korrektur fielen mir folgende Ausgaben auf:

    (GTK+_Template.exe:1044): Gtk-CRITICAL **: gtk_table_attach: assertion `child->parent == NULL' failed
    
    (GTK+_Template.exe:1044): Gtk-CRITICAL **: gtk_table_attach: assertion `child->parent == NULL' failed
    
    (GTK+_Template.exe:1044): Gtk-WARNING **: Can't set a parent on widget which has a parent
    
    (GTK+_Template.exe:1044): Gtk-WARNING **: Can't set a parent on widget which has a parent
    
    (GTK+_Template.exe:1044): Gtk-WARNING **: Can't set a parent on widget which has a parent
    
    (GTK+_Template.exe:1044): Gtk-WARNING **: Can't set a parent on widget which has a parent
    
    (GTK+_Template.exe:1044): Gtk-WARNING **: Can't set a parent on widget which has a parent
    
    (GTK+_Template.exe:1044): Gtk-WARNING **: Can't set a parent on widget which has a parent
    

    Warum hast du die nicht erst beseitigt, bevor du den Code gepostet hast? Warnungen, besonders wenn sie auch noch kritisch sind, sollte man ernst nehmen. Wenn man's nicht tut, siehst du ja, was passiert.

    Ich hab sie beseitigt:

    #include <gtk/gtk.h>
    #include <Test-DLL.h>
    #define NBOOK 3
    #define BUF 235
    #define IMG 9
    #define TAB 6
    static gint
    
    delete_Event(GtkWidget *widget, GdkEvent event, gpointer daten) {
    	g_print("Das Fenster wird zerstoert!\n");
    	return FALSE;
    }
    static void end ( GtkWidget *widget, gpointer daten ) {
    	g_print("Und tschuess!\n");
    	gtk_main_quit();
    }
    int main(int argc, char *argv[]) {
            SomeFunction("Das Programm ist noch nicht mal in der Alpha PHASE!");
    	GtkWindow  *win;
    	GdkPixbuf *ico;
    	GtkImage   *image[IMG];
    	GtkTable   *table[TAB];
    	GtkHButtonBox *hbutbox[3];
    	GtkNotebook *nbook;
    	GtkLabel    *nbook_titel[NBOOK];
    
    	GtkLabel *version;
    	GtkVButtonBox *vbox;
    
    	guint i;
    	gchar buf[BUF];
    	gtk_init( &argc, &argv );
    
    	ico = gdk_pixbuf_new_from_file ("images/lmlogo.gif", NULL);
    	image[1] = GTK_IMAGE(g_object_new( GTK_TYPE_IMAGE,
    		"file", "images/lmlogo.gif",
    		NULL));
    	image[2] = GTK_IMAGE(g_object_new( GTK_TYPE_IMAGE,
    		"file", "images/lmlogo.gif",
    		NULL));
    	image[3] = GTK_IMAGE(g_object_new( GTK_TYPE_IMAGE,
    		"file", "images/lmlogo.gif",
    		NULL));
    
    	win = GTK_WINDOW(g_object_new( GTK_TYPE_WINDOW,
    		"title", "Lynax Messenger",
    		"default-width", 250,
    		"default-height", 300,
    		"resizable", TRUE,
    		"window-position", GTK_WIN_POS_CENTER,
    		"border-width", 5, "icon", ico,
    		NULL ));
    
    	table[0] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
    		"n-columns", 2,
    		"n-rows", 1,
    		"column-spacing",0,
    		"row-spacing",0,
    		NULL));
    	table[1] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
    		"n-columns", 1,
    		"n-rows", 1,
    		"column-spacing",0,
    		"row-spacing",0,
    		NULL));
    
    	table[2] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
    		"n-columns", 1,
    		"n-rows", 1,
    		"column-spacing",0,
    		"row-spacing",0,
    
    		NULL));
    
    	table[3] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
    		"n-columns", 1,
    		"n-rows", 1,
    		"column-spacing",0,
    		"row-spacing",0,
    
    		NULL));
    
    	table[4] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
    		"n-columns", 1,
    		"n-rows", 1,
    		"column-spacing",0,
    		"row-spacing",0,
    
    		NULL));
    	table[5] = GTK_TABLE(g_object_new( GTK_TYPE_TABLE,
    		"n-columns", 1,
    		"n-rows", 1,
    		"column-spacing",0,
    		"row-spacing",0,
    		NULL));
    
    	hbutbox[0] = GTK_HBUTTON_BOX(g_object_new( GTK_TYPE_HBUTTON_BOX, NULL));
    	hbutbox[1] = GTK_HBUTTON_BOX(g_object_new( GTK_TYPE_HBUTTON_BOX, NULL));
    	hbutbox[2] = GTK_HBUTTON_BOX(g_object_new( GTK_TYPE_HBUTTON_BOX, NULL));
    
    	gtk_box_pack_start_defaults( GTK_BOX( hbutbox[0]),
    		GTK_WIDGET(table[3]));
    
    	gtk_box_pack_start_defaults( GTK_BOX( hbutbox[1]),
    		GTK_WIDGET(table[4]));
    
    	gtk_box_pack_start_defaults( GTK_BOX( hbutbox[2]),
    		GTK_WIDGET(table[5]));
    
    	gtk_table_attach_defaults(GTK_TABLE(table[3]),GTK_WIDGET (image[2]), 0,1, 0,1);
    
            //Sorgen für die Gtk-CRITICAL Meldungen
    	//gtk_table_attach_defaults(GTK_TABLE(table[4]),GTK_WIDGET (image[2]), 0,1, 0,1);
    	//gtk_table_attach_defaults(GTK_TABLE(table[5]),GTK_WIDGET (image[2]), 0,1, 0,1);
    
    	nbook = GTK_NOTEBOOK(g_object_new( GTK_TYPE_NOTEBOOK,
    		"enable-popup", TRUE,
    		"show-border",TRUE,
    		NULL ));
    
    	for(i=0; i < NBOOK; i++) {
    
    		if(i==0)
    		{
    
    			nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
    				"label", "ICQ/AIM/MSN SERVER",
    				NULL ));
    		}
    		else if(i==1)
    		{
    
    			nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
    				"label", "LM SERVER Einstellungen",
    				NULL ));
    		}
    		else if(i==2)
    		{
    
    			nbook_titel[i]   = GTK_LABEL(g_object_new( GTK_TYPE_LABEL,
    				"label", "Hilfe",
    				NULL ));
    
    		}		
    	}
            //Aus Schleife ausgelagert.
    	gtk_notebook_append_page(nbook,
    		GTK_WIDGET( hbutbox[0]),
    		NULL);
    
    	gtk_notebook_append_page(nbook,
    		GTK_WIDGET (hbutbox[1]),
    		NULL);
    
    	gtk_notebook_append_page(nbook,
    		GTK_WIDGET( hbutbox[2]),
    		NULL);
    
    	g_signal_connect( win, "delete-event",
    	G_CALLBACK(delete_Event), NULL );
    	g_signal_connect( win, "destroy",
    	G_CALLBACK(end), NULL );
    
    	gtk_table_attach_defaults(GTK_TABLE(table[0]),GTK_WIDGET (table[1]), 0,1, 0,1);
    	gtk_table_attach_defaults(GTK_TABLE(table[0]),GTK_WIDGET (table[2]), 1,2, 0,1);
    
    	gtk_table_attach_defaults(GTK_TABLE(table[1]),GTK_WIDGET (image[1]), 0,1, 0,1);
    
    	gtk_table_attach_defaults(GTK_TABLE(table[2]),GTK_WIDGET (nbook), 0,1, 0,1);
    
    	gtk_container_add(GTK_CONTAINER(win), GTK_WIDGET(table[0]));
    
    	gtk_widget_show_all( GTK_WIDGET(win) );
    
    	gtk_main();
    	g_print("Die GTK-Hauptschleife wurde beendet\n");
    
    	return 0;
    }
    

    Mehr werde ich aber nicht machen, wenn du nicht erst vernünftig programmieren lernst. Dein Code ist ziemlich übel. Nicht formatiert (hätte VS 05 nicht die Auto-Format Funktion, hätte ich noch früher aufgehört), total unstrukturiert, miese Variablennamen. So kann ich dir nicht helfen.

    Sorry, aber für sowas habe ich keine Zeit. Außerdem denke ich, dass du in C bzw. C++ noch nicht so weit bist, um GTK+ zu programmieren. Dir fehlen Grundlegende Techniken im Umgang mit der Sprache. Und damit meine ich nicht nur, dass man keine Funktionen in main deklarieren soll, sondern dass man auch mal Code aus der main auslagern könnte.
    Das wird so nix. Hör auf mit GTK+, lern vernünftig mit C und C++ umzugehen und geh's dann noch mal an. Du brauchst meinen Rat nicht zu beherzigen, kannst mich ruhig für ein Arschloch halten usw., aber wenn du den Rat nicht befolgst, wirst du ewig so weitermurksen. Dein Bier.

    Viel Glück

    GPC



  • Kein Problem aber ich danke dir trotzdem ...
    und du hast recht ich bin noch nciht so weit mit c also lerne es noch richtig gut, finde es aber trotzde, sinnvoll mit gtk anzufangen, da ich finde das es so einen besseren lerneffekt gibt, kapieren tu ich die tutorials in gtk auch, nur war das eben eine etwas andere un speziellere frage, die in einem tut nicht beantwortet werden kann

    und ja ich lern C;)
    aber auch gtk^^
    jeder hat seine eigene lernmethode, meine mag zwar nicht ganz richtig in deinen augen sein aber ich finde sie bringt mcih weiter



  • LM1 schrieb:

    Kein Problem aber ich danke dir trotzdem ...
    und du hast recht ich bin noch nciht so weit mit c also lerne es noch richtig gut, finde es aber trotzde, sinnvoll mit gtk anzufangen, da ich finde das es so einen besseren lerneffekt gibt,

    ...<hüstl>

    Ich weiß, dass GPC weiß, wie man sauber programmiert.
    Wenn Du schon nicht auf mich hörst, vielleicht fällt dir auf, dass Du den Kram ("Lerne programmierern, dann GTK - es ist für Dich und für uns Zeitverschwendung sich damit ausführlich zu beschäftigen...") nicht zum ersten Mal hörst.

    LM1 schrieb:

    jeder hat seine eigene lernmethode, meine mag zwar nicht ganz richtig in deinen augen sein aber ich finde sie bringt mcih weiter

    Das bestreite ich nicht.
    Aber es ist sehr wahrscheinlich, dass Du Dir damit Techniken aneignest, die sauberer Programmierung widersprechen. Möchtest Du dann sauber programmieren, musst Du Dir alles, was Du Dir jetzt aneignest wieder abgewöhnen.

    Ein Programmierer, der Dich zu guter und sauberer Programmierung führen möchte, wird sich also weigern, Dich bei Deinem Vorgehen zu unterstützen.


Anmelden zum Antworten