C GtkFixed的用法:内部小部件忽略坐标
我正在尝试将GtkFrame,在GtkFixed中,向左移动。原始代码如下C GtkFixed的用法:内部小部件忽略坐标,c,gtk2,C,Gtk2,我正在尝试将GtkFrame,在GtkFixed中,向左移动。原始代码如下 frm_2 = gtk_frame_new (NULL); gtk_widget_show (frm_2); gtk_fixed_put (GTK_FIXED (fixed1), frm_2, 160, 16); gtk_widget_set_size_request (frm_2, 1105, 264); gtk_frame_set_shadow_type (GTK_FRAME (frm_2), GTK_SHADOW_
frm_2 = gtk_frame_new (NULL);
gtk_widget_show (frm_2);
gtk_fixed_put (GTK_FIXED (fixed1), frm_2, 160, 16);
gtk_widget_set_size_request (frm_2, 1105, 264);
gtk_frame_set_shadow_type (GTK_FRAME (frm_2), GTK_SHADOW_ETCHED_OUT);
fixed3 = gtk_fixed_new ();
gtk_widget_show (fixed3);
gtk_container_add (GTK_CONTAINER (frm_2), fixed3 );
frm_1_frm_2 = gtk_frame_new (NULL);
gtk_widget_show (frm_1_frm_2);
gtk_fixed_put (GTK_FIXED (fixed3), frm_1_frm_2, 6, 8); // <-- THIS
gtk_widget_set_size_request (frm_1_frm_2, 250, 224);
gtk_frame_set_shadow_type (GTK_FRAME (frm_1_frm_2), GTK_SHADOW_ETCHED_OUT);
和
gtk_fixed_put (GTK_FIXED (fixed3), frm_1_frm_2, 50, 8);
在所有情况下,结果都是一样的:GtkFrame位置看起来没有改变,其行为方式与第一个代码段相同
小部件的完整层次结构是:
GtkWindow( GTK_WINDOW_TOPLEVEL )
|
+-GtkFixed fixed1
| |
| +-GtkFrame
|
+-GtkFrame frm_2
|
+-GtkFixed fixed3
|
+-GtkFrame frm_1_frm_2
|
+-GtkFrame another frame
...
Gtk版本为:
ls libgtk*libgtk-x11-2.0.so.0.2400.23
总之,您的显示管理器将做出许多您无法(主要是因为您不应该)控制的决策。这可能就是为什么你的小部件不在你想要的地方。尽量避免依赖GtkFixed,而是使用其他容器,并根据需要添加填充和间距,以获得类似效果。只是不要使用GtkFixed。这是邪恶的。在未来的几年里,用户界面开发人员将向您发送仇恨邮件。不要使用GtkFixed。说真的,别这么做。生命是一件美好的事情,值得欣赏和珍惜,因为它是美好的。不要使用GtkFixed。你会像我的狗被修好一样,把尾巴夹在两腿之间,待上几个月。不要使用GtkFixed。+1非常感谢给您带来的不便。这些代码是我工作中的一个坏礼物。最后我解决了。。。这个问题很复杂,不容易重现。我们使用散列将变量与标识符链接起来。在另一个文件中,帧被移动以响应外部事件。。。我为这个糟糕的问题感到抱歉。。。
GtkWindow( GTK_WINDOW_TOPLEVEL )
|
+-GtkFixed fixed1
| |
| +-GtkFrame
|
+-GtkFrame frm_2
|
+-GtkFixed fixed3
|
+-GtkFrame frm_1_frm_2
|
+-GtkFrame another frame
...