Adding A Label At A Fixed Position

	MainWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); 		//GTK_WINDOW_TOPLEVEL = Has a titlebar and border, managed by the window manager.
	
	//Get screen size
	int ScreenWidth;
	int ScreenHeight;
	GdkScreen *screen = gtk_window_get_screen(GTK_WINDOW(MainWindow));
	ScreenWidth = gdk_screen_get_width(screen);			// in pixels
	ScreenHeight = gdk_screen_get_height(screen);
	
	//Create a Fixed Container
	GtkWidget *fixed;
	fixed = gtk_fixed_new();
	gtk_widget_set_size_request(fixed, ScreenWidth, ScreenHeight);
	gtk_container_add(GTK_CONTAINER(MainWindow), fixed);
	gtk_widget_show(fixed);
	
	//Add status label
	GtkWidget *StatusLabel;
	StatusLabel = gtk_label_new(NULL);
	gtk_label_set_markup(GTK_LABEL(StatusLabel), "<span foreground=\"white\" size=\"x-large\">Hello World</span>");
	gtk_label_set_justify(GTK_LABEL(StatusLabel), GTK_JUSTIFY_CENTER);
	gtk_fixed_put(GTK_FIXED(fixed), StatusLabel, 10, 20);		//x, y from top left
	
	gtk_widget_show_all(MainWindow);

Update Label

gtk_label_set_markup(GTK_LABEL(StatusLabel), "<span foreground=\"white\" size=\"x-large\">Helloooooooooooooo\nWorld</span>");
	#define	KEYBOARD_TEXT_SPAN_MARKUP		"<span font_desc=\"Roboto\" foreground=\"black\" size=\"x-large\" weight=\"bold\" >"
	char temp_string[512];
	
	strcpy(temp_string, KEYBOARD_TEXT_SPAN_MARKUP);
	strcat(temp_string, g_markup_escape_text(&edit_text[0], -1));		//g_markup_escape_text will escape any special (&, <, >) characters in your string 
	strcat(temp_string, "</span>");
	gtk_label_set_markup(GTK_LABEL(lblKeyboardText), temp_string);

Styling Text

See the available Pango styling options here.

Setting A Font Name
gtk_label_set_markup(GTK_LABEL(StatusLabel), "<span font_desc=\"URW Palladio L 20\" foreground=\"white\" size=\"x-large\">Hello World</span>");
Font Size
	gtk_label_set_markup(GTK_LABEL(TimerLabel), "<span foreground=\"white\"  font_desc=\"40.0\">Hello World</span>");
Using Newly Installed Fonts

We originally copied new ttf fonts into ~/.fonts (/home/pi/.fonts ) and couldn’t use them in GTK.  We moved them to /usr/share/fonts/truetype, rebooted and they worked fine, e.g.


gtk_label_set_markup(GTK_LABEL(StatusLabel), "<span font_desc=\"Arcade Interlaced 20\" foreground=\"white\" size=\"x-large\">Hello World</span>");

Multi Line

Just use newline “\n” in the string.

Alignment

Centre align a label:

	gtk_widget_set_size_request(lblStatus, 200, 0);				//Set width of the label (so centre align will work)
	gtk_widget_set_halign(lblStatus, GTK_ALIGN_CENTER);
	gtk_fixed_put(GTK_FIXED(fixed), lblStatus, 396, 76);		//x, y from top left

Alignment of multi line labels

gtk_label_set_justify() sets the alignment of the lines in the text of the label relative to each other.   It has no effect on labels containing only a single line.

	gtk_label_set_justify(GTK_LABEL(StatusLabel), GTK_JUSTIFY_CENTER);		//Only sets alignment of multiple lines

Delete label

	gtk_widget_destroy(lblStatus);
	lblStatus = NULL;

  You can safely used destroy on a widget that hasn’t actually been displayed yet.  You can re-create and place the widget again later after it has previously been destroyed, you’re just removing its current usage.