学习使用GTK+ 3.使用GtkBuilder、界面设计器Glade和其他GTK+组件

400 篇文章 3 订阅
147 篇文章 0 订阅

学习使用GTK+ 3.使用GtkBuilder、界面设计器Glade和其他GTK+组件

学习使用GTK+ 系列的第 4 篇 (本系列共6篇)

这一部分包括GTK+相关组件的简要介绍,和界面设计器的使用方法。如果内容存在错误,或者方法不适用与你的电脑,请在下方评论区留言给我,谢谢!

GTK+的姊妹库

 

准确地说,GTK+仅指一个界面物件库。为了制作GTK+,一些副产品相继诞生,比如C语言界很有名的的GLib库。这些GTK+的“姊妹库”都是GTK+所依赖的,而且,制作GTK+程序时可能需要直接使用这些库。

  • GLib :目前最好的C语言数据结构库之一。除数据结构外,它还包括许多常用小工具,比如多线程管理、定时器。GTK+界面无关的部分基本都被并入GLib中。
  • GIO :GLib库相对独立的一部分,专门处理输入输出流。新版本的GIO还包括了网络连接功能。
  • GObject :GLib库相对独立的一部分,维护一套对象系统。GTK+疯狂地使用这个系统。
  • ATK :ATK提供一组查看和控制接口以方便对GTK+程序的访问。
  • pango :负责处理GTK+中和字体有关的部分。
  • cairo :著名的2D渲染库,被Firefox等很多程序使用。它也是目前GTK+使用的2D渲染库,通过它可以进行矢量绘图。
  • gdk-pixbuf :GDK的一个部分,提供了一组位图函数,包括位图变换、位图文件读写等等。
  • GDK :提供一组接口,把GTK+从桌面系统细节中隔离出来。它是一组底层函数,可以直接访问窗口细节。GTK+系统有关的部分多数在这里。

这些库的API参考都可以在GNOME参考(http://library.gnome.org/devel/references.html.zh_CN )中找到。

还有一些库是GTK+依赖的第三方库,下面是几个重要的。

  • gettext :国际化库。主要用于制作多语言程序。运行时gettext自动识别操作系统语言,然后从已有语言包中选择一个最合适用户的。
  • iconv :字符集转换库。GTK+内部使用UTF-8字符集,有时需要字符集转换。

GTK+内部构成

GTK+本身只负责界面组织。它提供的函数大致可分为三类,物件(Widget)、对象(Object)和其它工具函数。

工具函数提供一些与界面关系密切的实用功能,比如剪贴板读写。

对象是一些功能更加复杂的不可见元素,它们和界面息息相关,比如GtkBuilder。

界面设计器Glade

通过代码来组织界面繁琐而不直观,因而有人为GTK+做了一款界面设计器,名为Glade,现已成为GTK+最重要的辅助工具。

接下来用一个计算器制作的实例来讲解GTK+界面设计器的使用方法。

打开Glade。Glade会自动新建一个文件,新建后会弹出对话框设置文件格式,应选用GtkBuilder。

首先建一个窗口。在左栏中找到“窗口”一项,点一下即可。中间部分的黑框即为窗口中的内容。

下面要组织窗口中的内容了。要注意的是,一个灰色区域只能放置一个物件。如果需要放置多个物件,可以使用水平框、垂直框或表格物件,这些容器可以把一个灰色区域分成多个。

添加Spin按钮(Spin按钮用于输入数字)、表格、按钮等物件,可以把界面画成想要的样子,在右下方的属性设置中,可以设置物件的各种属性。在“常规”选项卡中,可以设置一些重要的初始值,物件名等。注意:需要动态更改的物件,物件名很重要。

“包装”选项卡负责物件的间距控制和大小改变方式等。GTK+在窗口大小改变时会智能地调整物件大小,其依据的就是这个选项卡里的设置。

计算器的界面成形了。记得经常保存,Glade有时会比较脆弱。

注意:在输入完某项属性之后务必使输入焦点离开当前输入区,然后才可以保存文件,否则当前输入区的更改不会被立即保存到文件中。

载入界面

Glade文件的本质是个XML文件,这个文件可以用GtkBuilder对象载入并生成界面。下面这样写可以载入一个Glade文件。

GtkBuilder*
 gtk_load_glade(
gchar*
 filename)

{
GtkBuilder * gb;
 
//新建一个GtkBuider对象
gb= gtk_builder_new( ) ;
//载入文件,失败则返回NULL
if ( ! gtk_builder_add_from_file( gb, filename, NULL) ) return NULL;
//连接文件中包含的所有信号
gtk_builder_connect_signals( gb, NULL) ;
 
//返回GtkBuilder对象供后面操作使用
return gb;
}

载入后还需要还需要获得已载入的物件地址,并将储存在物件指针里以便以后动态更改物件。一个聪明的策略是使指针名字和物件在Glade里设置的名字 一样。用函数gtk_builder_get_object()可以获得指定名字的物件地址。为了简便,可以写一段宏代替冗长的函数调用。下面这段代码演 示了获得主窗口(名为WMain)和Spin按钮(名为SAns)地址的方法。

#define w_(builder,type,name) name=GTK_##type(gtk_builder_get_object(builder,#name))

 
GtkWindow * WMain;
GtkSpinButton * SAns;
 
void cal_get_widgets( GtkBuilder* gb)
{
w_( gb, WINDOW, WMain) ;
w_( gb, SPIN_BUTTON, SAns) ;
}

主窗口默认情况下应该显示出来。下面这个函数只能在获得物件地址后执行。

void
 cal_widget_init(
)

{
gtk_widget_show_all( GTK_WIDGET( WMain) ) ;
}

编写回调函数

现在的主要任务就是编写回调函数——这些函数才是程序的主角。在某个事件被触发时,对应的函数会被执行。这个函数可以在Glade中指定。在Glade中选定某个物件,然后在右下角“信号”选项卡中选择一个合适的事件,在“操作句柄”列填入函数名。

下面为窗口WMain指定destroy事件的回调函数on_WMain_destroy()。

然后编写一个函数on_WMain_destroy()。在Windows下,这个函数要加上修饰词G_MODULE_EXPORT。

G_MODULE_EXPORT void
 on_WMain_destroy(
GtkObject*
 widget,
 gpointer user_data)

{
gtk_main_quit( ) ;
}

这个回调函数只是退出程序而已。最后献上一段main()。

int
 main(
int
 argc,
 char
 *
argv[
]
)

{
GtkBuilder * gb;
 
gtk_init( & argc,& argv) ;
 
gb= gtk_load_glade( "gtk-cal.glade" ) ;
if ( gb== NULL) return - 1 ;
cal_get_widgets( gb) ;
cal_widget_init( ) ;
 
gtk_main( ) ;
 
return 0 ;
}

这个计算器程序目前只完成了最基本的部分,这个系列后续的文章会把它做完。有关回调函数、物件函数的信息,请参考GTK+ API参考。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gotk3 提供 Go 绑定 GTK 3 和依赖的其他项目。每个组件都给出了用来导入包路径的子目录。以下是部分已经实施的支持库:GTK 3 (3.6 and later)GDK 3 (3.6 and later)GLib 2 (2.36 and later)Cairo (1.10 and later)已经采取谨慎的内存管理与Go的垃圾收集无缝工作,而无需使用或理解图形对象的浮动参考。简单示例:package main import (     "github.com/conformal/gotk3/gtk"     "log" ) func main() {     // Initialize GTK without parsing any command line arguments.     gtk.Init(nil)     // Create a new toplevel window, set its title, and connect it to the     // "destroy" signal to exit the GTK main loop when it is destroyed.     win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)     if err != nil {         log.Fatal("Unable to create window:", err)     }     win.SetTitle("Simple Example")     win.Connect("destroy", func() {         gtk.MainQuit()     })     // Create a new label widget to show in the window.     l, err := gtk.LabelNew("Hello, gotk3!")     if err != nil {         log.Fatal("Unable to create label:", err)     }     // Add the label to the window.     win.Add(l)     // Set the default window size.     win.SetDefaultSize(800, 600)     // Recursively show all widgets contained in this window.     win.ShowAll()     // Begin executing the GTK main loop.  This blocks until     // gtk.MainQuit() is run.      gtk.Main() } 标签:gotk3
glade3.38.2是一个用于开发GTK+应用程序界面的可视化工具,可以通过简单的拖放和属性设置来创建界面。在使用glade3.38.2时,需要确保已经安装了GTK+和相关的开发包,并且熟悉使用GTK+的基本知识。 首先,打开glade3.38.2应用程序,在左侧的工具箱中可以找到各种常用的界面组件,如按钮、标签、文本框等。可以将这些组件拖放到主界面中,然后调整它们的位置和大小。 在属性编辑中,可以设置每个组件的属性,如名称、标签、大小、颜色等。还可以添加信号处理,用于处理用户交互事件,比如点击按钮触发的动作。在工具栏上还有一些常用的操作按钮,如保存、导入、导出等。 在进行界面设计时,建议先进行草图或原型设计,然后再开始使用glade3.38.2进行具体的界面构建。这样可以更好地组织界面结构和布局,并且可以更容易地进行调整和修改。 一旦界面设计完成,可以将界面导出为XML格式的文件,然后在代码中使用GTK+的库函数进行加载和显示。在编写代码时,可以通过glade3.38.2生成的XML文件来访问和操作界面组件,从而实现界面与逻辑的分离。 总的来说,glade3.38.2是一个强大的界面设计工具,可以帮助开发者快速、高效地创建GTK+应用程序的界面。通过灵活的拖放和属性设置,可以轻松实现各种界面布局和交互效果,为用户提供更好的使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值