`
Michaelmatrix
  • 浏览: 208797 次
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

GTK+ 布局管理

 
阅读更多

在本章中,我们将讲述如何将构件布置在窗口与对话框中。

当我们在设计应用程序的图形界面时,我们首先要决定的是在程序中用到哪种构件和管理应用程序中的这些构件。为了方便管理我们的构件,在GTK+通常使用不可见的构件称作layout containers. 。在本章节中,我们将设计其中的—— GtkAlignment, GtkFixed, GtkVBox 和 GtkTable.

GtkFixed

容器构件GtkFixed 用于布置子构件在一个固定的位置和设定固定的大小。这种构件并不是属于自动的布局关系器。实质上,在我们设计的大多数应用程序中,我并不使用GtkFixed;而在只用于一些比较特殊的场合。例如,游戏,含有绘图功能的专用软件,那些需要移动和调整大小的软件(正如电子表格中的图表)以及那些小型的教育用途软件。

在我上面的这个例子中,我用代码生成了三个按钮构件然后把他们布局在固定的坐标上。当我们如果试图去改变窗口的大小的时候,其中按钮将会保持他们的大小和之前的坐标。

fixed = gtk_fixed_new();

上面的代码就可以生成了一个GtkFixed 的容器构件。

gtk_fixed_put(GTK_FIXED(fixed), button1, 150, 50);

第一个按钮就 gtk_fixed_put()函数来进行布局,坐标为x=150, y=50.

Figure: GtkFixed container

GtkVBox

GtkVBox 是一种用于垂直布局的容器型构件。他把放置在他中的子构件放置在一个单独的列中。类似的是 GtkHBox也有相似的功能,有区别的在于他是用于水平布局,他的子构件是布置在一个单独的行中的。

上面的这个按钮就显示了 GtkVBox的作用。他把五个按钮都布局在同一列上。如果你改变程序窗口的大小,其中的子构件(如按钮button)也会改变大小。

vbox = gtk_vbox_new(TRUE, 1);

上面程序中生成了GtkVBox。 我们把其中的第一个参数设置为 TRUE。这就意味着,程序中我的按钮都为同样的大小。至于按钮之间的距离大小被设置为“1”象素。

gtk_box_pack_start(GTK_BOX(vbox), settings, TRUE, TRUE, 0);

在上面的程序中我们把“settings “按钮布局在vbox容器构件中。 至于函数实参中的前两个参数,分别是容器构件和我们要放置的子构件。接下来的三个参数中分别是expand, fill和padding。 值得注意的是如果fill对应的参数是FALSE,则按钮就不会充满整个vbox构件。比较类似的是,如果之前在gtk_vbox_new(TRUE, 1);已经设置按钮都是等宽高了,所以expand对应的参数,是完全没有效果的。(译者注:此处建议fill expand都设为TRUE,至于具体区别和含义可在编程时感受)

Figure: GtkVBox container

GtkTable

GtkTable布局构件即可以按照行也可以按照列来布局她的子构件。

在以上的例子中,我们将仿照计算器编写一系列按钮。

table = gtk_table_new(4, 4, TRUE);

上面我们生成了一个新的GtkTable 布局构件,并设置为4行与4列。

gtk_table_set_row_spacings(GTK_TABLE(table), 2);

gtk_table_set_col_spacings(GTK_TABLE(table), 2);

上面我们就设置了每行与每列的距离。

以上代码将生成16个按钮并把他们布局在GtkTable容器构件中。

Figure: GtkTable container

GtkAlignment

GtkAlignment 容器构件控制了她的子构件的对齐方式与大小。

在上面的例子中,我们把两个按钮布局在了一个窗口的右下角。为了实现这个效果,我们用一个水平盒子构件horizontal box 、一个竖直盒子构件vertical box 和两个对齐容器构件(alignment containers)。

valign = gtk_alignment_new(0, 1, 0, 0);

上面的代码中我们生成了一个对齐容器构件。

gtk_container_add(GTK_CONTAINER(vbox), valign);

然后我们把对齐容器构件布局在水平盒子中(vbox)。

上面代码中,我们生成了一个水平盒子( horizontal box) 然后把两个按钮布局在其中。

halign = gtk_alignment_new(1, 0, 0, 0);

gtk_container_add(GTK_CONTAINER(halign), hbox);

gtk_box_pack_start(GTK_BOX(vbox), halign, FALSE, FALSE, 0);

上面的代码中将生成一个对齐容器构件然后把布局在她中的子构件布局在右边。我们把水平盒子( horizontal box)添加到对齐容器构件中,然后又把对齐容器构件添加到竖直盒子中(vertical box)。 最后,我要振臂高呼一下,:)对齐容器构件( alignment container )中只能放置一个子构件,这就是为什么我们要用到那么多盒子来帮助我们布局那两个按钮了。

Figure: GtkAlignment container

Windows

接下来我们将展示一个更加高级一点的例子。具体就是展示一个窗口,你可以在JDeveloper IDE(一种java的集成开发软件)中发现这个例子的身影。

Figure: Windows dialog in JDeveloper

The dialog shows all opened windows, or more precisely tabs in JDeveloper application.

以上代码将生成一个简单的GTK+窗口。

table = gtk_table_new(8, 4, FALSE);

我们使用table表格容器构件来进行布局。

上面的代码生成了一个标签,设为居左。这个标签被布局在GtkTable构件容器的第一列。

文本显示构件占据了两行和两列。我们把该文本编辑构件的属性设置为editable 和光标隐藏(hide the cursor)。

我们把两个靠在一起的按钮布局在文本编辑构件的左边也就是第四行(我们是从0开始记数的),我们把这两个按钮布局在“对齐构件”(alignment widget)中,这样我们就可以把他俩布局在顶部了。

Figure: Windows

分享到:
评论

相关推荐

    Linux程序开发Gtk+ Gnome库

    4.4.6 布局容器构件GtkLayout 85 第5章 按钮构件 87 5.1 普通按钮GtkButton 87 5.2 开关按钮GtkToggleButton 90 5.3 检查按钮GtkCheckButton 91 5.4 无线按钮GtkRadioButton 91 第6章 调整对象 95 6.1 创建一个调整...

    GTK+2.0 中文版(基于GNOME官方文档翻译)

    布局容器 Layout Container 框架 Frames 比例框架 Aspect Frames 分栏窗口构件 Paned Window Widgets 视角 Viewports 滚动窗口 Scrolled Windows 按钮盒 Button Boxes 工具栏 Toolbar 笔记本 ...

    GTK初步入门

    GTK+程序设计教程 引言 第一个简单的GTK+程序 ... GTK+ 布局管理 GTK+ 中的事件(events)和信号(signals) GTK+中的对话框 GTK+ 中的常用构件(widget) GTK+ 中的常用构件(widget)II

    GTK+2.0中文教程 html格式

    布局容器 Layout Container 框架 Frames 比例框架 Aspect Frames 分栏窗口构件 Paned Window Widgets 视角 Viewports 滚动窗口 Scrolled Windows 按钮盒 Button Boxes 工具栏 Toolbar 笔记本 Notebooks ...

    gtk布局管理,实用,详细!

    gtk布局管理,实用,详细! gtk布局管理,实用,详细! gtk布局管理,实用,详细! gtk布局管理,实用,详细! gtk布局管理,实用,详细!

    Centos搭建GTK+Codeblock完整版

    FreeType库 GTK+(基于DirectFB)的字体绘制是通过pango+freetype+fontconfig三者协作来完成的,其中, fontconfig负责字体的管理和配置,freetype负责单个字符的绘制,pango则完成对文字的排版布局。Fr

    Linux应用程序开发指南

    4.4.6 布局容器构件GtkLayout 85 第5章 按钮构件 87 5.1 普通按钮GtkButton 87 5.2 开关按钮GtkToggleButton 90 5.3 检查按钮GtkCheckButton 91 5.4 无线按钮GtkRadioButton 91 第6章 调整对象 95 6.1 创建一个调整...

    gtk2编的程序

    gtk2编写的医院挂号管理系统,其中只能实现一部分小的功能,比如加载,插入,保存,编辑,删除,添加,查询等等功能

    xmonad-screenshot:用于 XMonad 的基于 Gtk 的屏幕捕获实用程序

    它会捕获所有现有的工作区并将生成的屏幕截图放置在~/.xmonad/screenshot.png示例截图布局布局注意事项安装在安装xmonad-screenshot之前,您可能需要确保已安装软件包并且其二进制文件位于PATH : $ type gtk2hsC2...

    Bubbly-Blue-Theme:该项目旨在为 WordPress、drupal、jinzora、ampache、Gtk2、Gtk3(包括扩展)、Qt、Metacity、Mutter 和其他基于 Web 的内容管理系统创建主题

    安帕奇 [0% 完成] jinzora [完成 0%]桌面和应用程序背景 [完成 0%] gtk-2.0 [完成 0%] gtk-3.0 [完成 0%] metacity-1(基于 Aldabra)[完成 50%] gnome-shell [完成 90%] 普利茅斯主题 [0% 完成]其他卢布 [0% 完成]...

    nwg-panel:基于GTK3的面板,用于前窗管理器

    这就是为什么我决定尝试编写基于GTK的面板的代码,其中包括我的两个收藏夹中的最佳功能: 和 。 非常感谢两个项目的开发人员和贡献者! 目前有8个模块可用,我没有计划更多。 基本系统控件可在“控件”模块中使用,...

    精通Qt4编程(第二版)源代码

    Qt提供了多种布局管理部件,包括Qt布局管理器、分裂器、栈部件、工作空间部件和多文档区部件等。本章一一介绍了这些部件,并举例说明了它们在图形用户界面编程中的应用。 121 \中级篇 第6章 2D绘图 蔡志明本章内容...

    精通qt4编程(源代码)

    Qt提供了多种布局管理部件,包括Qt布局管理器、分裂器、栈部件、工作空间部件和多文档区部件等。本章一一介绍了这些部件,并举例说明了它们在图形用户界面编程中的应用。 121 \中级篇 第6章 2D绘图 蔡志明本章内容较...

    一个简单的菜单,可以将所有最常用的单行代码和脚本放在一个地方

    在启动时为亮度滑块设置正确的值)添加对图像小部件的支持动态调整图像大小添加对复选框小部件的支持以合理的方式设计布局允许为选项卡设置名称将标签列表移到一边依赖关系Dama 使用 rust 构建,使用gtk crate 并...

    artist:跨平台C ++矢量图形库(受HTML5 canvas API的启发)

    Artist库超越了基本HTML5 canvas API,它具有用于处理文本布局的扩展以及用于文本编辑,字体和字体管理,路径创建和操作以及图像捕获和屏幕外图形的机制。消息2020年5月13日:基金会文档2020年3月20日:Quartz-2D的...

    moxie-native:基于Webrender的UI框架,具有前端

    它使用Webrender进行渲染,而不是依赖于其他UI工具包(例如Gtk)或Web浏览器。 这使您可以控制应用程序的外观,但可能会失去一些本机的外观。 前端API是使用构建的, 是一个框架,用于以声明方式定义类似于React的...

    dotfiles:美观的OpenboxWM环境

    你好呀! 感谢造访! 这是我最喜欢的openbox窗口管理器和某些应用程序的个人配置... 两种模式(最小)都有各自的窗口按钮样式,边距,边栏rofi和明暗布局。 从Joyful Desktop v2中删除了eyecandy tint2 更好的Tint2

    Python核心编程第二版(ok)

     3.4.1 模块结构和布局   3.4.2 在主程序中书写测试代码   3.5 内存管理   3.5.1 变量定义   3.5.2 动态类型   3.5.3 内存分配   3.5.4 引用计数   3.5.5 垃圾收集   3.6 第一个Python...

Global site tag (gtag.js) - Google Analytics