PC-Programmierung
›
Thread
Mehreres printf in einem Label (GTK)
T
transcend
Gast
04.02.2012 20:30
#2534035
Liebe Forumuser;
Ich habe die Aufgabe von einem Stream, welcher mir kontinuirlich Daten
liefert diese mittels GTK am Bildschirm zu zeigen.
Wie kann ich das mit Labels realisieren?
Also ich will in einem Label, Werte reinschreiben die sich laufen
ändern.
Das gane soll nach generierung des Fensters angezeigt werden.
Geht den das überhaupt?
Hier mein Code, der nur einen String-Wert anzeigt:
1 #include <gtk/gtk.h>
2 #include "rs232.h"
3 #include "receive_rs232.h"
4
5
6 void beenden ( GtkWidget * window ) // Funktion zum Beenden der Anwendung
7 {
8 gtk_main_quit ();
9 }
10
11 int main ( int argc , char ** argv )
12 {
13 char string [ 50 ];
14 int i = 0 ;
15 GtkWidget * window , * hbox , * button , * text ;
16
17 gtk_init ( & argc , & argv );
18 window = gtk_window_new ( GTK_WINDOW_TOPLEVEL );
19 gtk_window_set_title ( GTK_WINDOW ( window ), "Knöpfe" ); // windowtitel definieren
20 g_signal_connect ( G_OBJECT ( window ), "delete_event" , G_CALLBACK ( gtk_main_quit ), NULL );
21
22 gtk_window_set_default_size ( GTK_WINDOW ( window ), 250 , 50 ); // windowgröße definieren
23 gtk_widget_set_size_request ( window , 250 , 50 ); // windowgröße kann nicht kleiner die Angegebenen werte Skaliert werden
24 gtk_window_set_title ( GTK_WINDOW ( window ), "Hey" );
25 gtk_container_set_border_width ( GTK_CONTAINER ( window ), 5 );
26
27 hbox = gtk_hbox_new ( FALSE , 10 );
28 button = gtk_button_new_with_label ( "Button0" );
29
30 sprintf ( string , "%d" , i );
31 text = gtk_label_new ( string ); //Ich will in text die kontinuierlichen Werte reinschreiben und simultan im window anzeigen
32 gtk_box_pack_start_defaults ( GTK_BOX ( hbox ), text );
33 gtk_box_pack_start_defaults ( GTK_BOX ( hbox ), button );
34
35 g_signal_connect ( GTK_BUTTON ( button ), "clicked" , G_CALLBACK ( beenden ), "Programm durch Knopf beendet" );
36
37
38 gtk_container_add ( GTK_CONTAINER ( window ), hbox );
39 gtk_widget_show_all ( window ); // Alles anzeigen
40 gtk_main ();
41 return 0 ;
42 }
Danke schon im Voraus für eure Hilfe.
T
transcend
Gast
08.02.2012 11:27
#2539565
Andy D. schrieb:
> http://www.programmersheaven.com/mb/Linux/366036/3 ...
Vielen Dank für Deine Antwort, einen schönen Tag noch...
lg
M
Marvol
Gast
08.02.2012 22:14
#2540667
Hallo,
ich habe dies mit einem Thread realisiert. Hier kannst Du dann auch die
Daten von der Schnittstelle abfragen...
1 #include <gtk/gtk.h>
2 #include "rs232.h"
3 #include "receive_rs232.h"
4
5 guint threadtimerid ;
6
7 static gboolean thread_getdata ( gpointer data )
8 {
9 static int i ;
10 char buffer [ 20 ]; // Unschön, da Speicher fest allokiert.
11 sprintf ( buffer , "%d" , i ++ );
12 gtk_label_set_text ( GTK_LABEL ( data ), buffer ) ;
13 return TRUE ;
14 }
15
16 void beenden ( GtkWidget * window ) // Funktion zum Beenden der Anwendung
17 {
18 gtk_main_quit ();
19 }
20
21 int main ( int argc , char ** argv )
22 {
23 char string [ 50 ];
24 int i = 0 ;
25 GtkWidget * window , * hbox , * button , * text ;
26
27 gtk_init ( & argc , & argv );
28 window = gtk_window_new ( GTK_WINDOW_TOPLEVEL );
29 gtk_window_set_title ( GTK_WINDOW ( window ), "Knöpfe" ); // windowtitel definieren
30 g_signal_connect ( G_OBJECT ( window ), "delete_event" , G_CALLBACK ( gtk_main_quit ), NULL );
31
32 gtk_window_set_default_size ( GTK_WINDOW ( window ), 250 , 50 ); // windowgröße definieren
33 gtk_widget_set_size_request ( window , 250 , 50 ); // windowgröße kann nicht kleiner die Angegebenen werte Skaliert werden
34 gtk_window_set_title ( GTK_WINDOW ( window ), "Hey" );
35 gtk_container_set_border_width ( GTK_CONTAINER ( window ), 5 );
36
37 hbox = gtk_hbox_new ( FALSE , 10 );
38 button = gtk_button_new_with_label ( "Button0" );
39
40 sprintf ( string , "%d" , i );
41 text = gtk_label_new ( string ); //Ich will in text die kontinuierlichen Werte reinschreiben und simultan im window anzeigen
42 gtk_box_pack_start_defaults ( GTK_BOX ( hbox ), text );
43 gtk_box_pack_start_defaults ( GTK_BOX ( hbox ), button );
44
45 g_signal_connect ( GTK_BUTTON ( button ), "clicked" , G_CALLBACK ( beenden ), "Programm durch Knopf beendet" );
46
47 gtk_container_add ( GTK_CONTAINER ( window ), hbox );
48 gtk_widget_show_all ( window ); // Alles anzeigen
49
50 threadtimerid = g_timeout_add ( 20 , thread_getdata , text );
51
52 gtk_main ();
53 return 0 ;
54 }
T
transcend
Gast
11.02.2012 22:58
#2544787
Marvol schrieb:
> Hallo,ich habe dies mit einem Thread realisiert. Hier kannst Du dann auch
dieDaten von der Schnittstelle abfragen
Auch Dir eine Dankeschön für Deine Hilfe...
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
Noch kein Account?
Die Registrierung ist kostenlos und dauert nur eine Minute.
Jetzt registrieren