Forum: PC-Programmierung Mehreres printf in einem Label (GTK)


von transcend (Gast)


Lesenswert?

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.

: Verschoben durch Moderator
von Andreas D. (rackandboneman)


Lesenswert?


von transcend (Gast)


Lesenswert?

Andy D. schrieb:
> http://www.programmersheaven.com/mb/Linux/366036/3...

Vielen Dank für Deine Antwort, einen schönen Tag noch...

lg

von Marvol (Gast)


Lesenswert?

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
}

von transcend (Gast)


Lesenswert?

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...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
Lade...