GTK+

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: GTK+

Beitrag von +Fuss+ » Di Dez 23, 2008 11:33 pm

ich wollte mal was ausprobieren, irgendwas muss man ja ausprobieren wenn man was lernen will.
Ich probiere das jetzt mal mit der Neubenennung des Buttons.
Kerli hat geschrieben: Aber wozu sollte der Text eigentlich blinken? Ich hab bis jetzt noch kein Programm gesehen, dass das verwendet...
Es gibt auch Programme, da ändert sich die Schriftfarbe, wenn man mit der Maus über den Button fährt.
Es gibt auch Programme, da verschiebt sich das ganze Fenster, wenn man mit der Maus nur in dessen Nähe kommt.
Es gibt auch Programme, da vergrößert sich der Button, wenn man mit der Maus über ihn fährt.
Es gibt auch Programme, da ändert sich der Text in dem Button, wenn man mit der Maus über den fährt.
...

Und ich will doch nur das:
Einmal Text, dann kein Text, dann Text, dann kein Text....

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: GTK+

Beitrag von Kerli » Di Dez 23, 2008 11:56 pm

+Fuss+ hat geschrieben:Ich probiere das jetzt mal mit der Neubenennung des Buttons.
Du könntest es einmal mit gtk_button_set_label versuchen. Wenn du diese Funktion in eine von einem Timer aufgerufene Callbackfunktion schreibst, sollte es eigentlich zum gewünschten Blinken führen.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: GTK+

Beitrag von +Fuss+ » Mi Dez 24, 2008 12:14 am

An der Funktion hab ich jetzt schon so lange dran rumprobiert, einmal dachte ich, es funktioniert, da kam eine Fehlermeldung vom GCC, dass in der include von gtk der Button schon deklariert sei.

Ich bin jetzt am überlegen, ob ich erst einen Button ohne label nehme und nachher ein label zuweise, dass gewechselt wird.

Also so in etwa:

Code: Alles auswählen

void gtk_button_set_label(GtkButton *button, const gchar *label; sleep(1); const gchar *label2; sleep(1));
und dann das Ganze in eine Schleife, aber ich glaub nicht wirklich, dass das funktioniert.

Es gibt da vielleicht noch eine Möglichkeit, die ich auch leichter finden würde:

Man müsste es doch auch schaffen, das Label wieder zu löschen, oder?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: GTK+

Beitrag von Xin » Mi Dez 24, 2008 12:19 am

+Fuss+ hat geschrieben:An der Funktion hab ich jetzt schon so lange dran rumprobiert, einmal dachte ich, es funktioniert, da kam eine Fehlermeldung vom GCC, dass in der include von gtk der Button schon deklariert sei.
Wenn ich mir Deinen Code so ansehe, scheint mir, dass Du den Button selbst doppelt definierst.
+Fuss+ hat geschrieben:Also so in etwa:

Code: Alles auswählen

void gtk_button_set_label(GtkButton *button, const gchar *label; sleep(1); const gchar *label2; sleep(1));
und dann das Ganze in eine Schleife, aber ich glaub nicht wirklich, dass das funktioniert.
Gedanke vermutlich richtig, Ausführung überarbeitungsfähig.

Code: Alles auswählen

gtk_button_set_label(GtkButton *button, label); 
sleep(1); 
gtk_button_set_label(GtkButton *button, label2); 
sleep(1));
... und das in eine Schleife...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: GTK+

Beitrag von +Fuss+ » Mi Dez 24, 2008 12:48 am

Ich hab jetzt erstmal einen Button ohne Label erstellt.

dann über dem gtk_main(); das hier:

Code: Alles auswählen

gtk_button_set_label(GtkButton *button, label);
Ist label jetzt eine char oder ein string oder was?

Außerdem gibt der Gcc eine hübsche Fehlermeldung aus:

Code: Alles auswählen

Test.c: In Funktion »main«:
Test.c:34: Fehler: expected expression before »GtkButton«
Test.c:34: Fehler: Zu wenige Argumente für Funktion »gtk_button_set_label«

Und hier nochmal der gesamte Code, wie er jetzt aussieht:

Code: Alles auswählen

#include <gtk/gtk.h>
#include <stdio.h>
#include <unistd.h>

void button_geklickt(GtkWidget *button_widget, gpointer data) 
{
printf("Button \"%s\" geklickt!\n",
gtk_button_get_label(GTK_BUTTON(button_widget)) );
gtk_main_quit();
}

int main (int argc, char *argv[]) 
{
gtk_init(&argc, &argv);

GtkWidget *window;
GtkWidget *button;

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Weihnachten");

gtk_container_set_border_width(GTK_CONTAINER(window), 100);

g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK (gtk_main_quit), NULL);

button = gtk_button_new();

g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(button_geklickt), NULL);

gtk_widget_show(button);
gtk_container_add(GTK_CONTAINER(window), button);
gtk_widget_show(window);

gtk_button_set_label(GtkButton *button, label);
sleep(1);

gtk_main();

return 0;
}

Ich kapier das nicht!


MfG Fuss

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: GTK+

Beitrag von nufan » Mi Dez 24, 2008 1:29 am

Du hast die Klammern vergessen ;)
Dieses GtkButton * ist keine Deklaration sondern ein cast und casts stehen zwischen zwei Klammern.
Außerdem existierte die Variable "label" nicht. Sie enthält einfach den Text, der auf dem Button steht, in diesem Fall "klick".

Code: Alles auswählen

 #include <gtk/gtk.h>
#include <stdio.h>
#include <unistd.h>

void button_geklickt(GtkWidget *button_widget, gpointer data)
{
  printf("Button \"%s\" geklickt!\n",
  gtk_button_get_label(GTK_BUTTON(button_widget)) );
  gtk_main_quit();
}

int main (int argc, char *argv[])
{

  gtk_init(&argc, &argv);

  GtkWidget *window;
  GtkWidget *button;
  char label[] = "klick";

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(window), "Weihnachten");

  gtk_container_set_border_width(GTK_CONTAINER(window), 100);

  g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK (gtk_main_quit), NULL);

  button = gtk_button_new();

  g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(button_geklickt), NULL);

  gtk_widget_show(button);
  gtk_container_add(GTK_CONTAINER(window), button);
  gtk_widget_show(window);

  gtk_button_set_label((GtkButton*)button, label);
  sleep(1);

  gtk_main();

  return 0;

}

Ein Link der dich interessieren könnte: http://library.gnome.org/devel/gtk/stab ... utton.html

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: GTK+

Beitrag von +Fuss+ » Mi Dez 24, 2008 11:41 am

Ich hab den Code danach etwas abgeändert:

Code: Alles auswählen

  
char label[] = "Frohe Weihnachten";
char label2[] = "";
int anzahl;

Code: Alles auswählen

  
for (anzahl = 0; anzahl < 10; anzahl++)
{
gtk_button_set_label((GtkButton*)button, label);
sleep(1);
gtk_button_set_label((GtkButton*)button, label2);
sleep(1);
}
Kompiliert: keine Fehlermeldung!!!
gefreut
gestartet: 20 sek Warten und dann steht nichts auf dem Button :cry:

egal was ich mache, der Rechner arbeitet erst alles durch bevor der das Programm anzeigt...

Frohe Weihnachten
Fuss

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: GTK+

Beitrag von nufan » Mi Dez 24, 2008 12:14 pm

Müssen da nicht noch Funktionen sein, damit das Fenster und der Button auch angezeigt werden?
Die sollten natürlich auch in der Schleife stehen. Sonst wird alles ausgeführt und dann erst angezeigt.

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: GTK+

Beitrag von +Fuss+ » Mi Dez 24, 2008 12:27 pm

Das müsste das hier sein:

Code: Alles auswählen

  gtk_widget_show(button);
  gtk_container_add(GTK_CONTAINER(window), button);
  gtk_widget_show(window);
Ich setze die jetzt mal in die Schleife, mal sehen was passiert...

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: GTK+

Beitrag von +Fuss+ » Mi Dez 24, 2008 12:34 pm

jetzt sieht es so aus:

Code: Alles auswählen

gtk_button_set_label((GtkButton*)button, label);
sleep(5);
gtk_widget_show(button);
gtk_container_add(GTK_CONTAINER(window), button);
gtk_widget_show(window);  

gtk_button_set_label((GtkButton*)button, label2);
sleep(5);
gtk_widget_show(button);
gtk_container_add(GTK_CONTAINER(window), button);
gtk_widget_show(window);
Warnung vom GCC:
(TEST:10275): Gtk-WARNING **: Attempting to add a widget with type GtkButton to a container of type GtkWindow, but the widget is already inside a container of type GtkWindow, the GTK+ FAQ at http://library.gnome.org/devel/gtk-faq/stable/ explains how to reparent a widget.
Button "" geklickt!

Es dauert 10sek und dann erscheint das Fenster, wie immer in der Endstellung.
Ich hasse Gtk...

Antworten