如何将GtkWidgets发送到后面或前面?

时间:2017-12-20 08:51:40

标签: c layout gtk

我想知道是否有办法动态地“发送回”或“带到前面”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)

A Button is over B Button 是否有一些命令可以使“B按钮”位于“A按钮”的前面。 (看起来像下面的图片 - &gt;第二张图片)

B Button is over A Button

1 个答案:

答案 0 :(得分:1)

不,没有像GtkFixed那样的“功能”。

来自Gtk 2 documentation

  

描述

     

GtkFixed小部件是一个可以放置子小部件的容器   固定位置和固定大小,以像素为单位。 GtkFixed   不执行自动布局管理。

     

对于大多数应用程序,您不应该使用此容器!它让你感到高兴   从必须了解其他GTK +容器,但它的结果   在破碎的应用程序使用GtkFixed,以下内容将会如此   导致截断文本,重叠小部件和其他显示错误:

     
      
  • 主题,可能会更改小部件大小。

  •   
  • 您用来编写应用程序的字体以外的字体当然会改变包含文本的小部件的大小;请记住用户   由于难以阅读默认值,可能会使用较大的字体,或   他们可能正在使用Windows或GTK +的帧缓冲端口,其中   可以使用不同的字体。

  •   
  • 将文本翻译成其他语言会改变其大小。此外,在许多情况下,非英文文本的显示将使用不同的字体。

  •   
     

此外,无法正确镜像固定窗口小部件   从右到左的语言,如希伯来语和阿拉伯语。即通常为GTK +   将翻转界面以将标签放在它们的右侧   标签,但它不能用GtkFixed做到这一点。所以你的申请会   不能用从右到左的语言。

     

最后,固定定位使添加/删除GUI变得有点烦人   元素,因为你必须重新定位所有其他元素。这是   您的应用程序的长期维护问题。

     

如果您知道这些问题都不适合您的应用,   并且更喜欢GtkFixed的简单性,无论如何都要使用小部件。   但你应该知道权衡

添加它们的顺序是它们将保留在虚拟Z轴中的顺序。您可以通过删除和读取它们或其他类似方法来控制它。