GTKGTK介绍

最近在用GTK写一些工具,所以写一个基础教程系列,总结学习成果。 简介GTK是一款开源的、面向多平台的GUI工具箱,其英文全称为GIMP Toolkit。最初是Peter Mattis 和 Spencer Kimball 为GNU Image Manipulation Program (GIMP)编写,用来替代付费的Motif。在后续的发展中,它已经成为通用的GUI库,应用于越来越多的程序,Linux平台的图形应用程序的半壁江山都是使用GTK编写的。 GTK的英文全称GTK的英文全称,让我想到了GCC。GCC最初定位于GNU C Compiler,但随着支持的编译器越来越多,它的定义已经包不住编译器的多样性,所以现在改成了GNU Compiler Collection。这样看来,是不是GTK的名字也得换换了,毕竟现有的名字很局限。 GTK的语言绑定GTK是使用C语言写的,所以其原生API都是面向C的,同时GTK的一大特点是,在C语言层面实现了面向对象的特性。如果你是用C++语言作为开发语言、调用GTK的C接口的话,使用会稍显繁琐,这是语言层面的差异,跟框架关系不大。正是为了避免不同语言调用C的繁琐,GTK提供了多语言的绑定,为不同的语言提供同等抽象级别的语言调用,这样C++程序员就可以直接调用C++的语言绑定,使用方式友好。 GTK的授权GTK是完全免费的,而且基于LGPL协议,这可以保证私有软件通过链接使用GTK可以不把软件源代码开放,对商业应用较友好,这跟GPL协议是不一样的。也正是LGPL协议,使得早些年Gnome(基于GTK编写)风头胜过KDE(基于QT编写)。 GTK的跨平台GTK是跨平台的,支持Unix类的系统、Windows,甚至手机平台。之前我专门有篇文章介绍了在Windows下的环境搭建,C语言的开发环境的搭建还是非常容易的。 GTK vs GTK+关于名字。从网上的资料上,你可以看到GTK+的字眼,这个加号官方是有描述的: The "plus" was added to "GTK" once it was moved out of the GIMP sources tree and the project gained utilities like GLib and the GTK type system, in order to distinguish it from the previous, in-tree version.大意是:GTK从GIMP独立出来之后,加入了一些GLib和GTK类型系统的支持,为了和GIMP代码树中的版本区分,所以带上加号,这一区分就是好多年,给广大的人民群众带来了不小的认知麻烦。在今年,官方终于决定把加号去掉,以后直接叫GTK。 GTK的发布版本关于版本。现在开源的大环境是采用刷版本的方式,像火狐浏览器,谷歌浏览器版本蹭蹭的涨。之前GTK一直采用小步慢跑的版本方式,估计也快要刷版本了,下面引用一篇旧闻: GNOME开发者在多伦多举办的GTK会议上讨论了新的Gtk发布方案,针对Gtk 3.x系列中的问题,开发者提议加快大版本的发布速度:每两年发布一个大版本如 Gtk 4、Gtk 5和Gtk 6,每6个月发布一个与旧版本不兼容的小版本,如Gtk 4.2、Gtk 4.4和Gtk 4.6。这项计划意味着Gtk 4.0不是我们将称之为Gtk 4的最终稳定API。新的大版本能与旧的版本并行安装,如Gtk 4 和Gtk 3能安装在一个系统中,但不兼容的小版本不能,它们使用了相同的pkg-config名字和头文件目录。每一个连续小版本的API将逐渐成熟稳定,也就是说Gtk 4.6发布时API将最终稳定下来,Gtk 4.6可以称之为 Gtk 4了。使用Gtk的开发者可以选择跟随稳定的版本。为什么选择GTK免费这条最实在。大的组织,比如公司,也是很注重成本的;小的个人,财务的承受能力也是有限的,这是GTK的诞生的原因。而且,很多软件授权真的不便宜。 ...

June 27, 2019 · 1 min · jiezi

GTKWindows下Haskell的GTK开发环境搭建

一个在Windows下相对小众的GUI框架-GTK,碰上一个相对小众的编程语言-Haskell,会碰出什么样的火花呢?现实的结果就是:相对于Linux,想在Windows下搭建好一个能工作的开发环境,简直是太难了!本篇文章介绍了一种可用的搭建方法。 安装msys2安装过程比较简单,过程略。假设安装的是64位的版本:msys2_x86_64,使用默认配置安装,默认C盘。 配置环境变量可在当前命令行里配置环境变量,如下: SET PATH=C:\\msys64\\mingw64\\bin;C:\\msys64\\usr\\bin;%PATH%SET PKG_CONFIG_PATH=C:\\msys64\mingw64\\lib\\pkgconfigSET XDG_DATA_DIRS=C:\\msys64\\mingw64\\share上面环境变量只是在当前会话生效;若要永久生效则需: 安装GTK软件包安装完msys2后,启动菜单里会就会有如图所示的三个菜单项: 启动msys2或mingw64任意一个,执行以下命令安装一些相关的函数库和工具: pacman -S mingw-w64-x86_64-gtk3pacman -S mingw-w64-x86_64-gladepacman -S mingw-w64-x86_64-toolchain base-develpacman -S mingw-w64-x86_64-gobject-introspectionpacman -S mingw-w64-x86_64-gtksourceview3上述软件,比如glade,早期编程可能用不到,也可以暂时不安装。如果后续还少其他软件包,使用pacman安装即可。 到这里,C语言的GTK开发环境已经搭建好了,可使用C语言编写GTK程序了。下面是使用C语言编写的一个示例程序example.c: #include <gtk/gtk.h>static voidactivate (GtkApplication* app, gpointer user_data){ GtkWidget *window; window = gtk_application_window_new (app); gtk_window_set_title (GTK_WINDOW (window), "Window"); gtk_window_set_default_size (GTK_WINDOW (window), 200, 200); gtk_widget_show_all (window);}intmain (int argc, char **argv){ GtkApplication *app; int status; app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE); g_signal_connect (app, "activate", G_CALLBACK (activate), NULL); status = g_application_run (G_APPLICATION (app), argc, argv); g_object_unref (app); return status;}使用以下命令编译: ...

June 10, 2019 · 1 min · jiezi