GTK+图形化应用程序开发学习笔记(五)—组装盒、组合表、固定容器构件
一、组装盒
组装盒(GtkBox)也称为组合构件。使用组装盒可以将多个构件放在一个容器中。容器可以把组装盒看作是一个构件。不像按钮构件,组装盒在屏幕上时看不见的。事实上,它们是同时跟踪若干子构件的不可见容器。组装盒分为纵向组装盒和横向组装盒。纵向组装盒在垂直方向堆积构件,横向组装盒沿水平方向堆积构件。
使用gtk_vbox_new函数建立纵向组装盒,使用gtk_hbox_new函数建立横向组装盒。在建立组装盒以后,可以使用gtk_box_pack_start函数或gtk_box_pack_end函数将构件放到组装盒中。
为了显示构件,必须将构件放入组装盒中,并将组装盒放在容器内。这等效于使容器具有容纳多个构件的能力。虽然组装盒没有任何可视的部分,但是必须使容器和组装盒成为可视。因为可视性影响加到容器内的构件。
2.
名称::
|
gtk_hbox_new
gtk_vbox_new
|
功能:
|
创建一个横向组装盒(gtk_hbox_new)
创建一个纵向组装盒(gtk_vbox_new)
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
GtkWidget *gtk_hbox_new(gboolean homogeneous,gint spacing);
GtkWidget *gtk_vbox_new(gboolean homogeneous,gint spacing);
|
参数:
|
homogeneous子构件是否具有同样的大小
spacing子构件间的距离
|
返回值:
|
新的组装盒
|
建立组装盒的函数取两个参数,用来确定组装盒在屏幕上的外观。
第一个参数称为homogeneous.用这一参数来确定所有增加的构件具有同样的大小。例如,在一个横向组装盒中建立5个按钮,分别带有标号:fred、joe、sue、karen和Bartholomew
the Great。如果homogeneous参数为FALSE,组装盒建立5个不同大小的按钮,正好在按钮上容纳各自的标号的正文。如果homogeneous参数为TRUE,组装盒计算最大的构件大小,然后按照最大的构件的大小对所有按钮分配同样大小的空间。
第二个参数称为spacing。用它来确定插入组装盒的构件之间的空间。将spacing参数设置为0表示在插入的构件之间不留空间。
3.
名称::
|
gtk_box_pack_start
gtk_box_pack_end
|
功能:
|
将构件放到组装盒中
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
void gtk_box_pack_start(GtkBox *box,GtkWidget *child,gboolean expend,gboolean fill,guint padding);
void gtk_box_pack_end(GtkBox *box,GtkWidget *child,gboolean expend,gboolean fill,guint padding);
|
参数:
|
box组装盒的名称
child 子构件的名称
expend构件周围是否还有可扩充的空间
fill构件是否需要充分利用构件周围空间
padding构件周围要保留多少个填充的像元
|
返回值:
|
无
|
函数gtk_box_pack_start将构件放在顶部(对于纵向组装盒)或左边(对于横向组装盒。函数gtk_box_pack_end将构件放在底部(对于纵向组装盒)或右边(对于横向组装盒)。
gtk_box_paxk_start和gtk_box_pack_end有5个参数,其中3个参数用来确定如何将构件放在组装盒内。
expand参数表示在所有构件加入组装盒以后,构件周围是否还有可扩充的空间。如果用homogenous格式建立组装盒,则忽略这一参数。因为homegeneous参数表示构件在组装盒内使用同样大小的空间。
fill参数表示构件是否需要充分利用构件周围空间。将此参数设置为TRUE允许构件稍稍扩大一点,以充分利用组装盒分配给它的空间。将此参数设置为FALSE强制构件只使用它需要的空间。多余的空间围绕构件的周围分布。
padding参数表示在构件周围要保留多少个填充的像元。多数情况下将它的值设置为0。
#include <gtk/gtk.h>
void PackNewButton(Gtk Widget *box,char *szLabel);
int main(int argc,char *argv[ ])
{
GtkWidget *window; /*定义窗体*/
GtkWidget *box; /*定义组装盒*/
gtk_init(&argc,&argv); /*初始化GTK+库*/
window=gtk_window_new(GTK_WINDOW_TOPLEVEL); /*创建窗体*/
gtk_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL); /*登记destroy信号,调用退出函数*/
box=gtk_vbox_new(FALSE,0); /*创建组装盒*/
PackNewButton(box,”Button1”); /*调用创建按钮函数*/
PackNewButton(box,”Button2”);
PackNewButton(box,”Button3”);
PackNewButton(box,”Button4”);
PackNewButton(box,”Button5”);
gtk_container_add(GTK_CONTAINER(window),box); /*把组装盒放入窗体*/
gtk_widget_show(box); /*使组装盒可视*/
gtk_widget_show(window); /*使窗体可视*/
gtk_main(); /*等待用户操作*/
}
void PackNewButton(GtkWidget *box,char *szLabel)
{
GtkWidget *button;/*定义按钮*/
button=gtk_button_new_with_label(szLabel); /*创建带标号的按钮*/
gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,0); /*把按钮加入组装盒*/
gtk_widget_show(button); /*使按钮可视*/
}
|
下面我们来编译它:
$gcc –o box box.c `pkg-config –cflags –libs gtk+-2.0`
$./box
程序运行后会出现下面的图形:
本例涉及到了按钮的创建,大家暂时不必关注,我会在下面的章节介绍。
二、组合表
组合表允许将多个构件放入一个窗口内,这一点类似于组装盒。但是,组装盒在放置构件时只允许纵向或横向的二维控制。组合表则类似于HTML表;允许用行和列控制构件的放置,并且对象可以取多行或多列。
4.
名称::
|
gtk_table_new
|
功能:
|
创建组合表
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
GtkWidget* gtk_table_new(guint rows,guint columns,gboolean homogeneous);
|
参数:
|
rows 表的行数
columns 表的列数
homogeneous 子构件是否具有同样的大小
|
返回值:
|
新的组合表
|
rows 和columns表示建表所用的行数和列数。homogeneous的效果和在组装盒中homogeneous的使用效果相同。如果在建立组合表时它被设置为TRUE,表内的表框用最大构件的外框。如果它被设置为FALSE,则将每一列的宽度设置为本例中最大构件的宽度,每一行的高度设置为行中最大构件的高度。
行的排列从0~rows-1,列的排列从0~columns-1.当增加构件时,每个构件提供开始列、结束列、开始行和结束行。如果构件将被放在表的左上角,列的范围从0到1。行的范围从0到1。
5.
名称::
|
gtk_table_attach
gtk_table_attch_defaults
|
功能:
|
将控件加到表中
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
void gtk_table_attach(GtkTable *table,GtkWidget * child,guint left_attach,guint right_attach,guint top_attach,guint botton_attach, GtkAttachOptions xoptions,GtkAttachOptions yoptions,guint xpadding,guint ypadding);
void gtk_table_attach_defaults( GtkTable *table,GtkWidget * child,guint left_attach,guint right_attach,guint top_attach,guint botton_attach);
|
参数:
|
table 组合表名
child 子构件名
left_attach 横向起始位置
right_attach 横向结束位置
top_attach 纵向起始位置
botton_attach 纵向结束位置
xoptions 横向选项
yoptions 纵向选项
xpadding 横向填充像元
ypadding 纵向填充像元
|
返回值:
|
无
|
两个函数都可以将构件加到表中。
table为表的名字,child和widget为构件的名字。
left_attach、right_attach、top_attach和botton_attach表示控件在表中的位置。
xoptions和yoptions可以用GTK_FILL、GTK_SHRINK和GTK_EXPAND,或者用3者的任意组合。其中GTK_FILL选项表示构件充分利用分配给它的空间进行扩展。GTK_SHRINK选项允许构件缩小到比原来分配的空间还小的空间。GTK_EXPAND选项使表扩展填满它插入的所有空间。
xpadding和ypadding表示围绕构件填充的像元数。
gtk_table_attach_defaults函数取比较少的参数,并对gtk_table_attach函数使用的xoptions、yoptions、xpadding和ypadding参数用缺省值来代替。对gtk_table_attach_defaults函数来说,xpadding和ypadding的缺省值为0;而xoptions和yoptions的却省值为(GTK_FILL|GTK_EXPAND)。
下面是应用组合表的程序例子:
/*table.c*/
#include <getk/gtk.h>
int main(int argc,char *argv[])
{
GtkWidget *window; /*定义窗体*/
GtkWidget *table; /*定义组合表*/
GtkWidget *button; /*定义按钮*/
gtk_init(&argc,&argv); /*初始化*/
window=gtk_window_new(GTK_WINDOW_TOPLEVEL); /*创建窗体*/
gtk_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL); /*登记destroy信号函数*/
table=gtk_table_new(4,4,FALSE); /*创建组合表*/
button=gtk_button_new_with_label(“button1”); /*创建按钮*/
gtk_table_attach(GTK_TABLE(table),button,0,1,0,1,GTK_FILL,GTK_FILL,0,0);/*把按钮加入组合表*/
gtk_widget_show(button); /*显示按钮*/
button=gtk_button_new_with_label(“button1”);
gtk_table_attach(GTK_TABLE(table),button,1,2,1,2,GTK_FILL,GTK_FILL,0,0);
gtk_widget_show(button);
button=gtk_button_new_with_label(“button1”);
gtk_table_attach(GTK_TABLE(table),button,2,3,2,3,GTK_FILL,GTK_FILL,0,0);
gtk_widget_show(button);
gtk_container_add(GTK_CONTAINER(window),table); /*把组合表添加到窗体上*/
gtk_widget_show(table); /*显示组合表*/
gtk_widget_show(window); /*显示窗体*/
gtk_main(); /*等待用户操作*/
return FALSE;
}
|
$gcc –o table table.c `pkg-config –cflags –libs gtk+-2.0`
$./table
这里没有给出参数的所用情况的程序,大家可以把相应的参数换一下,体会各个参数的作用。
三、固定容器构件
GtkFixed(固定容器构件)允许将构件放在窗口的固定位置,这个位置是相对与窗口的左上角的。构件的位置可以动态改变。
使用GtkFixed为构件定位,在大多数情况下都是不可取的。因为当用户调整窗口尺寸时,勾结不能适应窗口的尺寸变化。当然,你可以在窗口尺寸变化的时候采取行动,调整构件的位置和大小。
gtk_fixed_new函数用于创建新的固定容器构件。
6.
名称::
|
gtk_fixed_new
|
功能:
|
创建固定容器构件
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
GtiWidget *gtk_fixed_new(void);
|
参数:
|
无
|
返回值:
|
新的固定容器构件
|
gtk_fixed_put函数将构件放在由x,y指定的位置。
7.
名称::
|
gtk_fixed_put
|
功能:
|
将构件放入固定容器构件的指定位置
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
void gtk_fixed_put(GtkFixed *fixed,GtkWidget *widget,gint16 x,gint16 y);
|
参数:
|
fixed固定容器容器构件
widget要放在固定容器构件中的构件
x放置的横坐标
y放置的纵坐标
|
返回值:
|
无
|
gtk_fixed_move函数将指定构件移动到新位置。
8.
名称::
|
gtk_fixed_move
|
功能:
|
移动固定容器构件里的构件到指定位子
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
void gtk_fixed_move(GtkFixed *fixed,GtkWidget *widget,gint16 x,gint16 y);
|
参数:
|
fixed 固定容器构件
widget要放在固定容器构件中的构件
x放置的横坐标
y放置的纵坐标
|
返回值:
|
无
|
下面是固定构件的程序例子:
#include <gtk/gtk.h>
GtkWidget *window;/*定义窗体*/
GtkWidget *fixed;/*定义固定容器构件*/
GtkWidget *button;/*定义按钮*/
gint function(gpointer data);
gpointer data;
gint sign;
int x=0;
int y=0;
int main(int argc,char *argv[ ])
{
gtk_init(&argc,&argv);/*初始化*/
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);/*创建窗体*/
gtk_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL);
fixed=gtk_fixed_new();/*创建固定容器构件*/
button=gtk_button_new_with_label(“button”);/*创建按钮*/
gtk_fixed_put(GTK_FIXED(fixed),button,10,10);/*将按纽放在固定容器构件的指定位置*/
sign=g_timeout_add(600,function,data);/*创建定时器*/
gtk_container_add(GTK_CONTAINER(window),fixed);/*把固定容器构件放入窗体*/
gtk_widget_show(fixed);
gtk_widget_show(button);
gtk_widget_show(window);
gtk_main();
}
gint function(gpointer data)
{
gtk_fixed_move(GTK_FIXED(fixed),button,++x,++y);/*移动按纽*/
return TRUE;
}
|
程序运行后得到如下的窗体:
窗体每隔600毫秒便会扩大一次。
分享到:
相关推荐
这个“GTK+图形化应用程序开发学习笔记”包含了关于使用GTK+进行GUI编程的详细教程和实践案例。 GTK+的核心特性包括跨平台支持、丰富的组件库、强大的主题引擎以及对多种编程语言的绑定,如C、C++、Python、Vala等...
根据给定的信息,我们可以推断出《用GTK+和GDK开发Linux图形用户界面应用》是一本专注于使用GTK+和GDK在Linux环境下构建GUI应用程序的专业书籍。虽然提供的部分内容并没有直接涉及具体的技术细节,但我们可以结合...
GTK+(GIMP Toolkit)和GDK(GIMP Drawing Kit)是用于开发Linux和其他Unix-like系统上图形用户界面(GUI)的应用程序的开源工具包。它们是GNU项目的一部分,广泛应用于自由和开放源码软件中。这篇文档将深入探讨...
GTK+ 程序设计中文版 GTK+ 是一种函数库,用来帮助制作图形交互界面。整个函数库都是由 C 语言来编写的。GTK+ 函数库通常也叫做 GIMP 工具包,...了解 GTK+ 的使用和应用将有助于您更好地开发图形交互界面应用程序。
在Linux操作系统中,开发应用程序是一项常见任务,而使用GTK+和GNOME库是构建图形用户界面(GUI)程序的一种流行方式。本指南将深入探讨如何利用这些强大的工具进行高效的编程。 GTK+(GIMP Toolkit)是一个跨平台...
Gtk+图形界面开发是Linux应用程序开发中的一个重要领域,它主要用于构建美观、功能丰富的图形用户界面(GUI)。Gtk+是一个跨平台的 widget 工具包,最初设计用于GNOME桌面环境,但现在也被广泛应用于其他Linux发行版...
本书详细介绍了两种Linux图形用户界面开发技术:GTK+/GNOME。主要内容包括:GUI的基本概念,GLib,GTK+及GNOME的简介,各种GUI元素的创建与使用,bIDE,Glade等等。最后通过两个综合实例来巩固所学知识。本书实例...
在本文中,我们将深入探讨如何使用C语言,结合GTK+/GTK+图形库和SQLite3数据库来开发一个选课系统。这个项目将展示如何利用这些技术创建一个用户友好的图形界面,以及如何处理和存储数据。 首先,让我们了解C语言。...
《Linux应用程序开发指南:使用GTK+ GNOME库》是面向Linux平台的应用程序开发人员的一本重要参考书籍,主要讲解如何利用GTK+和GNOME库来构建高效、用户友好的图形界面应用。这篇读书笔记将深入探讨其中的核心概念和...
Linux应用程序开发指南主要聚焦于使用GTK+、Gnome库以及GLib进行图形用户界面(GUI)的构建。这些工具和库在开源世界中扮演着重要角色,尤其在Linux平台上,它们为开发者提供了丰富的功能和高效的工具。 GTK+,全称...
本指南专注于使用GTK+和GNOME库进行Linux应用程序开发。GTK+(GIMP Toolkit)是一个强大的跨平台GUI库,而GNOME是Linux桌面环境的一个主要组成部分,它提供了许多与GTK+兼容的组件和API。 **GTK+库** GTK+是一个用...
总之,"gtk+-bundle_2.24.10-20120208_win32.zip"是一个为Windows平台准备的完整GTK+开发工具包,它让开发者能够在Windows上利用GTK+的强大功能创建美观且跨平台的图形界面应用程序。通过深入学习和实践,开发者可以...
GTK+,全称为GIMP Toolkit,是一个开源的GUI(图形用户界面)工具包,用于创建跨平台的应用程序。它最初是为图像处理软件GIMP(GNU Image Manipulation Program)开发的,但后来发展成为了一个广泛使用的多语言编程...
《GTK+/Gnome应用开发》一书为读者提供了深入理解GTK+和Gnome技术的全面指南,这是一本由Havoc Pennington撰写的、针对Linux环境下图形用户界面(GUI)开发的专业书籍。该书由Red Hat Advanced Development Labs出版...
"LINUX应用程序开发指南:使用GTK+ GNOME库"是针对这一主题的深入学习资源,主要聚焦于利用GTK+和GNOME库来构建高效、美观且功能丰富的应用。GTK+(GIMP Toolkit)是一个强大的跨平台的GUI构建工具包,而GNOME是基于...
通过阅读这份 GTK+ 2.0 中文手册,开发者不仅可以学习到 GTK+ 的核心概念和技术,还能掌握开发 GUI 应用的基本流程和最佳实践,为实现高效、美观的图形界面打下坚实的基础。尽管 GTK+ 已经更新到更高版本,但 GTK+ ...
Gtk+ 3.6.4 是一个用于开发图形用户界面(GUI)的开源工具包,主要面向Linux和其他类UNIX系统,但也有针对Windows平台的版本。这个“Gtk+ 3.6.4 win64.zip”文件是一个包含了Gtk+ 3.6.4在64位Windows操作系统上的SDK...
Linux系统中的GTK+ 2.0是一个用于创建图形用户界面(GUI)的开源库,它在许多基于Linux的桌面环境中广泛使用,如GNOME。GTK+(GIMP Toolkit)最初是为了GIMP图像编辑器开发的,但随着时间的发展,它已经成为了一个...