PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GTK Anfänger Problem



Fab96
29-05-2003, 15:28
Moin und sorry fürdas wenig aussagekräftige topic aber mir viel kein besseres ein.

Aber nun zu dem problem, ich programmiere C und hab vor kurzem mit GTK angefangen und versuche mich momentan reinzufuchsen nur bei einem programm bekomm ich fehlermeldungen und weiß absolut nichts damit anzufangen


#include <gtk/gtk.h>

void ausgabe (GtkWidget *widget, gpointer *data)
{
gtk_entry_set_text(GTK_ENTRY(widget),"");
}

int main ( int argc, char **argv)
{
GtkWidget *fenster;
GtkWidget *box;
GtkWidget *button1;
GtkWidget *textLabel;
GtkWidget *textEntry;


gtk_init(&argc,&argv);

fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL);
textEntry = gtk_entry_new();
button1 = gtk_button_new_with_label("Eingabe");
textLabel = gtk_label_new("1");
box = gtk_vbox_new(FALSE,0);

gtk_signal_connect(GTK_OBJECT(fenster), "destroy", GTK_SIGNAL_FUNC(gtk_main_quit), GTK_OBJECT(fenster));
gtk_signal_connect(GTK_OBJECT(button1), "clicked", GTK_SIGNAL_FUNC(ausgabe), GTK_OBJECT(textEntry));


gtk_box_pack_start(GTK_BOX(box), textEntry, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(box), button1 , FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(box), textLabel, FALSE, FALSE, 5);

gtk_container_add(GTK_CONTAINER(fenster),box);

gtk_widget_show_all (fenster);
gtk_main ();
return 0;
}

Die fehlermeldung ist:


Gtk-WARNING **: invalid cast from `GtkButton' to `GtkEntry'
Gtk-CRITICAL **: file gtkentry.c: line 439 (gtk_entry_set_text): assertion `GTK_IS_ENTRY (entry)' failed.


Ich finde absolut nicht worran es liegt, sicher irgendein schusselfehler nur bin ja noch anfänger, freue mich über jede hilfe.

tkortkamp
29-05-2003, 16:57
Hi!

Du übergibst void ausgabe (GtkWidget *widget, gpointer *data) dein Textfeld über "data" mit.
Mit "widget" ist immer das Widget gemeint, welches das Signal ausgesandt hat, in deinem Fall hier der Button. Ändere also das hier:


void ausgabe (GtkWidget *widget, gpointer *data)
{
gtk_entry_set_text(GTK_ENTRY(widget),"");
}

in das:


void ausgabe (GtkWidget *widget, gpointer *data)
{
gtk_entry_set_text(GTK_ENTRY(data),"");
}


c ya,
Tobias

Fab96
29-05-2003, 17:34
ok danke leuchtet ein nur wieso funktioniert dann das Programmbeispiel bei pronix (http://www.pronix.de/C/gtk/gtk_C_Kurs_kapitel10.shtml#10_1) ?


So noch eine frage wofür ich keinen neuen thread aufmachen möchte.

Wiemacht man es zum beispiel am einfachsten das man:
[list=1]
In einem TextFeld text eingeben kann.
Einen Button bestätigen
das was im textFeld steht in einem Label anzeigen.
[/list=1]
Alles soll im gleichen fenster sein.

Ich weiß das das eigentlich leicht sein müsste nur mir fehlt irgendwie der ansatz und ohne brauch ich mich auch garnicht ernst an "größere" sachen wagen...

tkortkamp
29-05-2003, 18:22
Hi!


Original geschrieben von Fab96
ok danke leuchtet ein nur wieso funktioniert dann das Programmbeispiel bei pronix (http://www.pronix.de/C/gtk/gtk_C_Kurs_kapitel10.shtml#10_1) ?

Bei Pronix benutzen sie gtk_signal_connect_object() zum Verbinden des Callbacks mit dem Signal nicht gtk_signal_connect() => s. auch http://developer.gnome.org/doc/API/gtk/gtk-signals.html#GTK-SIGNAL-CONNECT-OBJECT



So noch eine frage wofür ich keinen neuen thread aufmachen möchte.

Wiemacht man es zum beispiel am einfachsten das man:
[list=1]
In einem TextFeld text eingeben kann.
Einen Button bestätigen
das was im textFeld steht in einem Label anzeigen.
[/list=1]
Alles soll im gleichen fenster sein.

So wie die das bei dem Link von dir gemacht haben. :D

Btw, du weißt, dass das Pronix-Tutorial auf Gtk+ 1.2 aufbaut, oder?
Gtk+ ist mittlerweile schon bei der Version 2.2.1 angekommen.
Da du ja gerade angefangen hast Gtk+ zu lernen, würde ich mir überlegen ob es sich wirklich lohnt Gtk+ 1.2 zu lernen. Zwischen den alten und neuen Versionen gibt es einige (zum Teil recht große) Unterschiede.

Für Gtk+ 2.x findest du hier http://gtk.org/tutorial/ ein Tutorial.

c ya,
Tobias

Fab96
29-05-2003, 18:28
hm upps da sucht man die ganze zeit den fehler und dann benutzt man ausversehen eine ganz andere funktion..peinlich..


Bei dem link ist die ausgabe in einem 2ten fenster ich meinte dases im gleihcen fenster ist.


hm soweit ich weiß ist ja gtk2.0 abwärtskompatibel aber ich werd mir das tutorial auch mal anschauen schaden tut es sicher nichts und danke für die hilfe.

tkortkamp
29-05-2003, 19:01
Hi!


Original geschrieben von Fab96
hm upps da sucht man die ganze zeit den fehler und dann benutzt man ausversehen eine ganz andere funktion..peinlich..


Bei dem link ist die ausgabe in einem 2ten fenster ich meinte dases im gleihcen fenster ist.


hm soweit ich weiß ist ja gtk2.0 abwärtskompatibel aber ich werd mir das tutorial auch mal anschauen schaden tut es sicher nichts und danke für die hilfe.
Nein, Gtk+ 2.0 ist nicht abwärtskompatibel mit Gtk+ 1.2. Es wurden einige Grundlegende Veränderungen durchgeführt. Eine List mit den inkompatiblen Änderungen findest du hier: http://developer.gnome.org/doc/API/2.0/gtk/gtk-changes-2-0.html

c ya,
Tobias

Fab96
29-05-2003, 19:51
hm dann solltich wohl echt gtk 2 lernen und ich hasse doch englsiche tutorials :/ naja mehr als linux schrotten beim insten kann nicht passieren ;)

das mit dem text istaber noch ungeklärt ;)