我想知道是否有一种方法可以动态地“发送到后面”或“带到前面”GtkWidget。(我知道,可以通过更改GtkWidget的创建顺序来完成)
示例:(GTK+2.0,Cent OS 7.0,C)

#include <gtk/gtk.h>
int main( int argc, char *argv[] )
{
GtkWidget *window, *button1, *button2, *fixed;

gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
button1 = gtk_button_new_with_label("A button");
button2 = gtk_button_new_with_label("B button");

fixed = gtk_fixed_new();

gtk_fixed_put( (GtkFixed*)fixed,button2, 30, 30 );
gtk_fixed_put( (GtkFixed*)fixed,button1, 50, 50 );
gtk_container_add(GTK_CONTAINER(window), fixed);

gtk_widget_show_all (window);
gtk_main ();
return 0;
}

this program will display : (the first picture)

c - 如何将GtkWidgets发送到后面或前面?-LMLPHP
是否有一些命令可以使“B按钮”位于“A按钮”的前面。(看起来像下面这张图片-->第二张图片)
c - 如何将GtkWidgets发送到后面或前面?-LMLPHP

最佳答案

不,没有像GtkFixed中那样的“函数”。
Gtk 2 documentation开始:
说明
GtkFixed小部件是一个容器,可以将子小部件放在
固定位置和固定大小,以像素为单位。GTK固定
不执行自动布局管理。
对于大多数应用程序,不应使用此容器!它让你
从不得不了解其他GTK+容器,但它的结果
在破碎的应用程序中。在GtkFixed中,以下内容将
导致文本截断、小部件重叠和其他显示错误:
主题,这可能会改变小部件的大小。
除了用于编写应用程序的字体之外,其他字体当然会改变包含文本的小部件的大小;请记住,用户
可能由于难以读取默认值而使用更大的字体,或者
它们可能使用Windows或GTK+的帧缓冲区端口,其中
有不同的字体。
将文本翻译成其他语言会改变其大小。此外,在许多情况下,非英语文本的显示将使用不同的字体。
另外,固定小部件不能正确镜像到
从右到左的语言,如希伯来语和阿拉伯语。即通常为GTK+
会翻转界面,将标签放在它们的右边
标签,但不能用GtkFixed。所以你的申请会
不能用从右到左的语言。
最后,固定的定位使添加/删除GUI变得有点烦人
元素,因为您必须重新定位所有其他元素。这是
您的应用程序的长期维护问题。
如果你不知道这些都是你申请的问题,
更喜欢GtkFixed的简单性,当然要使用小部件。
但你应该注意权衡。
它们被添加的顺序是它们将保持在虚拟z轴中的顺序。您可以通过删除和读取它们或其他类似的方法来控制这一点。

关于c - 如何将GtkWidgets发送到后面或前面?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47902029/

10-13 08:25