K
Hallo,
ich habe mal angefangen mein Programm (C++) mit einer kleinen GTK+ GUI auszustatten. Ich bin neu in der Grafik-Programmierung, ich will nur ein Fenster wo ein paar Sensorenwerte angezeigt werden:
Zuerst wird alles initialisiert:
void guinit()
{
gtk_init (NULL, NULL);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
layout = gtk_layout_new(NULL, NULL);
gtk_window_set_title (GTK_WINDOW (window), "RescueMazeMonitor");
int width = 700;
int height = 500;
gtk_window_set_default_size(GTK_WINDOW(window), width, height);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
g_signal_connect (window, "destroy", shutdown, NULL);
gtk_container_add(GTK_CONTAINER(window), layout);
labelUSV = gtk_label_new("USV");
labelUSVmax = gtk_label_new("USVmax");
labelUSVmin = gtk_label_new("USVmin");
labelUSL = gtk_label_new("USL");
labelUSLmax = gtk_label_new("USLmax");
labelUSLmin = gtk_label_new("USLmin");
labelUSR = gtk_label_new("USR");
labelUSRmax = gtk_label_new("USRmax");
labelUSRmin = gtk_label_new("USRmin");
gtk_layout_put(GTK_LAYOUT(layout), labelUSVmax, width*0.5, height*0.1-20);
gtk_layout_put(GTK_LAYOUT(layout), labelUSV, width*0.5, height*0.1);
gtk_layout_put(GTK_LAYOUT(layout), labelUSVmin, width*0.5, height*0.1+20);
gtk_layout_put(GTK_LAYOUT(layout), labelUSLmax, width*0.3, height*0.1-20);
gtk_layout_put(GTK_LAYOUT(layout), labelUSL, width*0.3, height*0.1);
gtk_layout_put(GTK_LAYOUT(layout), labelUSLmin, width*0.3, height*0.1+20);
gtk_layout_put(GTK_LAYOUT(layout), labelUSRmax, width*0.7, height*0.1-20);
gtk_layout_put(GTK_LAYOUT(layout), labelUSR, width*0.7, height*0.1);
gtk_layout_put(GTK_LAYOUT(layout), labelUSRmin, width*0.7, height*0.1+20);
gtk_widget_show_all (window);
thread gtkThread(gtk_main);
gtkThread.detach();
}
Mittels
printf("%s\n", text);
gtk_label_set_label(GTK_LABEL(labelUSV), text);
wird das gtk label USV ca. alle 20ms aktualisiert.
Die ersten Paar Sekunden funktioniert dies, doch dann tritt ein seltsamer Fehler auf:
1. Das gtk label aktualisiert sich nicht mehr, es "friert ein" (der nicht-gui teil des Programms läuft fröhlich weiter, über printf("%s\n", text); wird alles korrekt ausgegeben.
2. Wenn ich das Fenster minimiere und nacher wieder wiederherstelle sind alle Labels verschwunden! Nur noch die Titelleiste samt funktionierenden Minimierungs-, Maximierungs- und Schließ-Buttons ist noch da. Das restliche fenster ist einfach nur grau (Hintergrundfarbe).
3. Wenn man das Fenster so weit nach rechts verschiebt das manche labels "außerhalb des bildschirms" sind und es dann wieder in die mitte macht bleiben die labels verschwunden!
Dieses Problem scheint vorallem dann auf zutreten, wenn ich mittels read(); von einer Seriellen Schnittstelle lese.
PC: Linux (Debian)
Ich hoffe ihr könnt mir sagen wieso dieser Fehler auftritt und wie ich ihn behebe.