我目前正在用C为Linux编程,并且需要一个GUI,所以我选择了GTK库来这样做。我现在有一个带有标签的窗口(开始时),但我不知道如何将其移动(在(x,y)坐标中,而不在zPosition中)以将其放在窗口顶部。
这是我在main()中的GTK代码
//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();
有人知道如何移动它吗?
谢谢!
这是我得到的:
(来源:hostingpics.net)
卡尔给了你部分答案。
关于为什么看到自己拥有的东西,有两个部分:
首先,GtkLabel具有一个古老的对齐机制,它从不推荐使用的GtkMisc类继承。有关详细信息,请参见GtkMisc的文档:xalign
和yalign
属性控制文本在标签分配中的位置,默认情况下将其设置为居中。但是请记住,它们已被弃用,因此通常有更好的选择。
其次,GtkWindow中只能有一个控件。该控件被分配了窗口的整个空间。
将这两个事实放在一起,您应该明白为什么拥有自己的东西。
那么正确的是什么呢?
您必须使用一个容器,例如GtkBox或GtkGrid,才能将多个控件放入GtkWindow。每个插件与它承载有四个特殊的性质:hexpand
,halign
,vexpand
,和valign
其控制所述容器的每个部件的位置和大小。这些是小部件本身的属性。
hexpand
并vexpand
确定容器是否分别在X和Y方向上分配了剩余的空间给该控件。如果设置了多个窗口小部件,则空间被平均分配。
halign
并valign
确定小部件在其分配中的位置。GTK_ALIGN_START
,,GTK_ALIGN_CENTER
然后GTK_ALIGN_END
将小部件分别放在给定对齐侧的开始,中间和结尾。GTK_ALIGN_FILL
填充小部件以适合分配。
此页面上有更多信息。
如果要精确定位控件,则应首先调查GtkGrid和GtkBox(递归应用)是否提供所需的内容。关于GtkLabels的默认内部居中的重要一点是,GtkGrid中的GtkLabel将已经与其邻居的文本垂直对齐。只需设置halign
为开始或结束即可使标签左对齐或右对齐(并设置valign
为在标签的邻居像表一样大时开始)。还有一些功能可提供边距和填充以使UI看起来不错。
但是,如果您绝对必须自己放置东西,请牢记所有内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句