2014-09-12 1 views
1

현재 리눅스 용 C로 코딩 중이며 GUI가 필요하므로 GTK 라이브러리를 사용했습니다. 이제는 레이블이있는 윈도우가 생겼지 만 윈도우의 맨 위에 놓는 방법 (zPosition이 아닌 (x, y) 좌표로)을 옮기는 방법을 모르겠습니다. 내 GTK 코드가 여기에윈도우에서 GTK 레이블 위치 변경 - C

입니다 주()

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

+0

그리고 컨테이너로 어떻게 할 수 있습니까? – P1kachu

답변

2

칼은 당신에게 해답의 일부를했다. 의 GtkLabel는 사용되지 않는 GtkMisc 클래스에서 상속 고풍 정렬 메커니즘을 가지고,

첫째 :

당신은 당신이 무엇을 볼 이유에

는 두 부분이 있습니다. 자세한 내용은 GtkMisc의 설명서를 참조하십시오. xalignyalign 속성은 레이블의 할당 범위 내에서 텍스트의 위치를 ​​제어하며 기본적으로 가운데로 설정됩니다. 그러나 이들이 더 이상 사용되지 않으므로 대체로 더 나은 대안이 있음을 기억하십시오.

둘째, GtkWindow에는 하나의 컨트롤 만있을 수 있습니다. 이 컨트롤은 윈도우의 전체 공간에 할당됩니다.

두 가지 사실을 조합하면 갖고있는 것의 이유를 알 수 있습니다.

그래서 올바른 대신 무엇입니까?

GtkBox 또는 GtkGrid와 같은 컨테이너를 사용하여 둘 이상의 위젯을 GtkWindow에 가져와야합니다. 각 위젯에는 컨테이너의 각 구성원의 위치와 크기를 제어하는 ​​hexpand, halign, vexpandvalign의 네 가지 특수 속성이 있습니다. 이들은 위젯 자체의 속성 인입니다.

hexpand 및는 컨테이너가 X 및 Y 방향으로이 컨트롤에 남겨진 공간을 할당할지 여부를 결정합니다. 여러 위젯에 확장 세트가 있으면 공간이 균등하게 분할됩니다.

halignvalign은 할당에서 위젯의 위치를 ​​결정합니다. GTK_ALIGN_START, GTK_ALIGN_CENTERGTK_ALIGN_END 위젯을 지정된 정렬면의 시작, 중간 및 끝 부분에 각각 배치하십시오. GTK_ALIGN_FILL은 할당에 맞게 위젯을 채 웁니다.

This page 자세한 정보가 있습니다.

컨트롤의 정확한 위치를 지정하려는 경우 먼저 GtkGrid 및 GtkBox (재귀 적으로 적용)가 원하는 것을 제공하는지 조사해야합니다. GtkLabel의 기본 내부 중심 지정에 대한 중요한 점은 GtkGrid의 GtkLabel이 이미 인접 항목의 텍스트에 수직으로 정렬된다는 것입니다. halign을 시작 또는 끝으로 설정하여 레이블을 왼쪽 맞춤 또는 오른쪽 맞춤으로 설정하십시오 (이웃이 테이블과 같이 큰 경우 시작하려면 valign을 설정하십시오).또한 마진과 패딩을 제공하여 UI를 멋지게 보이게하는 기능도 있습니다.

그러나 자신을 절대적으로 배치해야하는 경우 모든 것을 명심하십시오.

+0

클레어 완료, 지금은 이해합니다. 고맙습니다 – P1kachu