2014-09-12 121 views
1

我目前正在用C編寫Linux,我需要一個GUI,所以我帶着GTK庫去做。我現在有一個帶有標籤的窗口(開始),但我不知道如何將它移動(在(x,y)座標中,而不是在zPosition中),以便將它放在窗口的頂部。在窗口中更改GTK標籤的位置 - C

這裏是我的GTK代碼的main()

//Label 
pLabel=gtk_label_new(NULL); 
sUtf8 = g_locale_to_utf8("<span font_desc=\"Times New Roman italic 12\" foreground=\"#0000FF\">Neural Network - XOR Example</span>\n" 
         ,-1, NULL, NULL, NULL); 
gtk_label_set_markup(GTK_LABEL(pLabel), sUtf8); 
g_free(sUtf8); 
gtk_label_set_justify(GTK_LABEL(pLabel), GTK_JUSTIFY_CENTER); 


//Window 
gtk_window_set_position(GTK_WINDOW(pWindow), GTK_WIN_POS_CENTER); 
gtk_window_set_title(GTK_WINDOW(pWindow), "Neural Network"); 
gtk_window_set_default_size(GTK_WINDOW(pWindow), 900, 600); 
gtk_container_add(GTK_CONTAINER(pWindow), pLabel); 

g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(OnDestroy), NULL); 

gtk_widget_show_all(pWindow); 
gtk_main(); 

有沒有人對如何將它的想法?

謝謝!

這裏是我的了:

image http://img11.hostingpics.net/pics/286625ScreenShot20140912at181133.png

+0

GTK小部件被封裝到它們的容器中:https://developer.gnome.org/gtk3/stable/ch01s02.html。因此,標籤會填滿整個窗口,如果要添加另一個標籤,則每個窗口都會填充%50。我會建議使用小部件容器,而不是嘗試將標籤準確地放在你想要的位置。 (這就像Java Gui一樣)。 – Carl 2014-09-12 16:48:07

+0

我怎麼用容器做到這一點? – P1kachu 2014-09-12 17:16:04

回答

2

卡爾給了你答案的一部分。

至於爲什麼你看到你有什麼,有兩個部分組成:

首先,GtkLabel的有它從已過時GtkMisc類繼承一個古老的校準機構。有關詳細信息,請參閱GtkMisc的文檔:xalignyalign屬性控制文本在標籤分配中的位置,並且它默認設置爲居中。但請記住它們已被棄用,所以通常有更好的選擇。

其次,你只能在一個GtkWindow中有一個控件。該控件分配窗口的整個空間。

把這兩個事實放在一起,你應該明白爲什麼你有你所擁有的。

那麼什麼是正確的呢?

您必須使用容器(例如GtkBox或GtkGrid)將多個小部件放到GtkWindow中。每個構件都帶有四個特殊屬性:hexpand,halign,vexpandvalign,它們控制容器中每個構件的位置和大小。這些是屬性的小部件本身

hexpandvexpand確定容器是否分別在X和Y方向分配剩餘的空間留給該控件。如果多個小部件已擴展設置,則空間被均分。

halignvalign確定小部件在其分配中的位置。 GTK_ALIGN_START,0 GTK_ALIGN_CENTERGTK_ALIGN_END將小部件分別放置在給定對齊方的開始,中間和結束處。 GTK_ALIGN_FILL填充小部件以適應分配。

This page有更多信息。

如果您正在嘗試對控件進行精確定位,則應首先檢查GtkGrid和GtkBox(遞歸應用)是否提供您想要的內容。關於GtkLabels默認內部居中的一個重要事情是,GtkGrid中的GtkLabel已經與其鄰居的文本垂直對齊;只需設置halign即可開始或結束以獲得左對齊或右對齊的標籤(並且如果其鄰居像表一樣大,則設置valign開始)。還有一些功能可以提供邊距和填充以使界面看起來更加美觀。

但是,如果您絕對必須自己定位事物,請牢記一切。

+0

CLear和完整,現在我明白了。謝謝 – P1kachu 2014-09-12 19:27:23