我正试着把一个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_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, 0, 8);


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版本为:
伦敦证券交易所*
libgtk-x11-2.0.so.0.2400.23号
我做错什么了?
我该怎么解决?
对不起,我英语不好。

最佳答案

#请提供一个你所观察到的最低限度的工作示例幸运的是,从你提出的,我不必做很多工作,以便粘贴到现有的代码库,并使其建立,但有一个机会是问题以外的代码你张贴(即使只是间接的)。我已经试用了您的代码,内部小部件按任务的方式显示(不同的x值对应不同的位置)。
#2永远不要使用GtkFixed我知道有很多教条的编码准则(个人我喜欢goto),但这一条有优点Gtk位于显示管理器之上,而显示管理器又位于后端之上,如x11 quartz或waylandGtk没有说明小部件应该放在哪里那不是它的工作它只能提供建议。
你很可能会遇到这样的情况:Gtk走进办公室,说“我想要这个,另一个,在下班前放在我桌上”。
Gdk说的是“肯定的老板”。
当他走出房间时x11说“他不知道那会破坏无障碍性吗?”或者“一个连屏幕边界都没有的关闭按钮有什么用?”甚至“电脑说不”。
“把它放在你认为最好的地方,我会想办法混淆报告。”
“obfa什么?”
“完全正确”
总之,您的显示管理器将做出许多您无法(主要是因为您不应该)控制的决定这可能就是为什么你的小部件不是你想要的尽量避免依赖GtkFixed,而是使用其他容器,并添加填充和间距,因为您觉得有必要获得类似的效果不要用GtkFixed这是邪恶的在未来的几年里,用户界面开发人员会给你发送讨厌的邮件不要使用GtkFixed说真的,别这么做生命是一件美丽的东西,值得欣赏和珍惜不要使用GtkFixed你要花几个月的时间把尾巴夹在两腿之间,就像我的狗修好了一样不要使用GtkFixed。

09-30 21:47