使用GtkFixed:内部窗口小部件忽略坐标

问题描述 投票:2回答:1

我正在尝试将GtkFrame内部的GtkFrame移动到左侧。原始代码如下

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版本是:

ls libgtk * libgtk-x11-2.0.so.0.2400.23

  1. 我究竟做错了什么 ?
  2. 我该如何解决?

对不起,我的英语不好。

c gtk2
1个回答
1
投票

#1请提供您观察到的最低工作示例。幸运的是,从你提出的内容来看,我不需要做太多的工作就可以将它粘贴到现有的代码库中并使其构建,但是问题可能超出了你发布的代码(即使只是间接地)。我已经尝试了你的代码,内部小部件显示为它的任务(不同的x值的不同位置)。

#2永远不要使用GtkFixed。我知道有很多教条编码指南(我个人喜欢转到),但这个有优点。 Gtk位于显示管理器上方,显示管理器将位于x11石英或道路之类的后端上方。 Gtk没有说小部件应该去哪里。那不是它的工作。它只能提供建议。

你很可能会遇到Gtk走进办公室的情况,“我想要这个和那个,并且在业务结束时把它放在我的办公桌上”。

Gdk说“老板确定”。

当他走出房间时,x11说:“他不知道那会破坏可访问性吗?”或“什么是关键按钮甚至没有放在屏幕的范围内?”甚至“电脑说没有”。

“只要把它放在你认为最好的地方,我就会找到一种方法来混淆报告。”

“obfa-什么?”

“究竟”

总之,您的显示管理器会做出很多决定,你不能(主要是因为你不应该)控制。这可能就是您的小部件不在您想要的位置的原因。尽量避免依赖GtkFixed,而是使用其他容器,并根据需要添加填充和间距以获得类似的效果。只是不要使用GtkFixed。这是邪恶的。 UI开发人员将在未来几年内向您发送仇恨邮件。不要使用GtkFixed。说真的不要这样做。生命是一件美好的事,值得珍惜和珍惜。不要使用GtkFixed。你的尾巴会在你的腿之间花费几个月的时间,就像我的狗被固定一样。不要使用GtkFixed。

© www.soinside.com 2019 - 2024. All rights reserved.