Mehreres printf in einem Label (GTK)

Gast #2534035
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.
Gast #2540667
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren