在本章中,我们将讲述如何将构件布置在窗口与对话框中。
当我们在设计应用程序的图形界面时,我们首先要决定的是在程序中用到哪种构件和管理应用程序中的这些构件。为了方便管理我们的构件,在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
分享到:
相关推荐
4. **布局管理**:讲解 GTK+ 提供的不同布局管理器(如盒式布局、格子布局和流式布局),帮助开发者组织和排列界面元素。 5. **信号与回调**:深入解析 GTK+ 的事件处理机制,包括信号的定义、连接回调函数,以及...
GTK+提供了用于构建GUI应用程序的各种控件、布局管理和事件处理机制。开发者可以使用C语言来编写GTK+应用,也可以通过绑定到其他语言,如Python、Perl或Vala来使用。 3. **gettext-0.18.1.1.tar.gz**:这是一个用于...
GTK+提供了多种布局管理器,如网格(GtkGrid)、盒式布局(GtkBox)和堆栈布局(GtkStack),帮助组织和对齐控件。这些管理器可以根据窗口大小变化自动调整控件的位置和大小。 4. **样式和主题**: GTK+3.0引入了...
GTK+提供了丰富的控件和布局管理,使开发者能够轻松创建美观且功能齐全的应用程序。在这个选课系统中,我们将使用GTK+来设计和构建用户界面,如菜单、按钮、文本框和列表视图,以便学生和教师进行交互。 SQLite3是...
1. **GTK+基础**:介绍GTK+的基本概念,包括窗口、控件、布局管理器等,以及如何初始化和管理GTK+应用程序。 2. **控件与小部件**:详细讲解各种GTK+控件,如按钮、文本框、复选框、单选按钮、滚动条、菜单、对话框...
相较于早期版本,GTK+ 2.0引入了众多改进,包括对主题的支持、增强的布局管理以及更好的文档化等特性,使得开发者能够更轻松地构建美观且功能丰富的用户界面。 ##### 2.2 技术特点 - **跨平台性**:GTK+支持多种...
该工具包支持多种编程语言,包括C、C++、Python、Perl、Java等,提供了丰富的控件和布局管理机制,使得开发者可以构建美观且功能丰富的应用界面。 在“gtk+-bundle_3.10.4-20131202_win64”中,用户可以找到所有...
5. 布局管理:介绍如何使用 GTK+ 的布局管理器来布局组件。 6. 事件处理:介绍如何处理 GTK+ 中的事件,包括键盘和鼠标事件。 7. 对话框和消息框:介绍如何使用 GTK+ 的对话框和消息框来与用户进行交互。 8. 图形...
3. **布局管理**:使用Grid、Box、Table等容器来组织和布局控件。 4. **信号与回调**:理解GTK+中的信号机制,如何连接信号到回调函数。 5. **主题与国际化**:如何改变应用程序的外观,支持多语言。 6. **对话框和...
GTK+提供了几种布局管理器,如盒式布局(Box)、网格布局(Grid)和流式布局(FlowBox),帮助开发者组织和对齐小部件,以创建复杂的窗口布局。 4. GTK+主题与国际化: GTK+支持主题引擎,允许用户更改应用程序的...
6. **依赖管理**:GTK+与其他开源库如GLib、Pango、Atk等紧密协作,确保所有依赖项正确安装和配置是成功使用GTK+的关键。 7. **版本兼容性**:不同的GTK+版本可能会有API的变更,因此在升级或降级版本时,需要确保...
3. **布局管理**: 使用`gtk.Box`, `gtk.Grid`, `gtk.Table`等容器控件对子控件进行布局,通过调整大小请求和分配来控制界面的布局。 4. **信号连接**: 使用`connect()`方法监听用户交互,如点击按钮、改变文本框...
5. **布局管理**:GTK+提供了多种布局管理器,如Grid、Box和Table,手册会指导如何有效地组织和排列窗口小部件。 6. **对话框和窗口**:手册会涵盖各种对话框(如文件选择对话框、消息对话框)和窗口的创建、管理及...
GTK+(GIMP Toolkit)是一个跨平台的图形用户界面(GUI)工具包,广泛用于创建图形界面应用程序。...通过了解和掌握GTK+的使用,开发者可以充分利用其丰富的控件集和强大的布局管理机制,构建出用户友好的图形界面。
5. **布局管理**:GTK+使用盒式布局、网格布局和流式布局等方法,帮助开发者轻松组织和调整组件的位置。 初级教程可能涵盖以下内容: 1. **安装与设置**:如何在你的开发环境中安装GTK+库和相关的开发工具,如...
1. **GTK+基础**:介绍GTK+的基本概念,包括窗口、按钮、文本框等基本组件,以及布局管理器(如格子布局Grid、盒式布局Box)的使用。 2. **信号与回调**:GTK+中的事件处理机制,如何定义和连接信号到回调函数,...
它支持多种布局管理器,如Grid、Box和FlowBox,允许你自由地组织窗口元素。此外,Glade还支持事件处理,可以设置控件的回调函数,方便地编写交互逻辑。 Glade3-3.6.7版本可能包含以下特性: 1. **界面设计**:提供...
小部件可以通过布局管理器(如Grid、Box)进行组织,实现界面的排列和对齐。 在GTK+ 2.0 中,事件处理是一个关键部分。手册会涵盖如何响应用户的点击、键盘输入等事件,以及如何通过信号和回调函数来处理这些事件。...
4. **布局管理**:探讨GTK+的布局管理器,如Grid、Box和Table,如何有效地组织和排列控件。 5. **信号和回调**:解释GTK+中的事件处理机制,如何通过连接信号和回调函数来响应用户的操作。 6. **样式和主题**:...