GTK简单了解记录

摘要:
GTK+是自由软件,是GNU程序的一部分。GTK+的许可协议是LGPL。与许多其他组件工具包不同,GTK+不是基于Xt的。(这是“GNOME计划”和“GTK+计划”不同。GTK+2.0于2002年3月11日正式发布。然而,它与GTK+1并不完全兼容,因此必须由程序员移植。GTK+1仍然被使用,因为它更快、更简单或更适合嵌入式应用。从GTK+2的2.8版本开始,它依赖于Cairo库来完成渲染,这引入了对矢量图形的支持。开发Ridley项目试图统一与GTK相关的一系列问题+

GTK+http://zh.wikipedia.org/wiki/GTK%2B#.E5.9B.BE.E5.BD.A2.E6.97.A0.E5.85.B3.E4.BB.A3.E7.A0.81

GTK+最初是GIMP的专用开发库(GIMP Toolkit),后来发展为Unix-like系统下开发图形界面的应用程序的主流开发工具之一。GTK+是自由软件,并且是GNU计划的一部分。GTK+的许可协议是LGPL

编程语言

GTK+使用C语言开发,但是其设计者使用面向对象技术。也提供了C++gtkmm)、PerlRubyJavaPython(PyGTK)绑定,其他的绑定有AdaDHaskellPHP和所有的.NET编程语言。

与其他很多部件工具箱不同,GTK+ 并不基于Xt。这一决策优劣互见:优点是GTK+ 可以应用于其他系统,其灵活性也很强;而缺点就是它无法利用以传统方法为X11定制的X资源数据库。GTK+ 最早应用于X Window System,如今已移植至其他平台,诸如Microsoft WindowsDirectFB,以及QuartzMac OS X.

Glade是一个界面设计工具,但是它也包含了一种描述GUI界面的XML语言,它和libglade一起工作就可以直接使用GTK和GNOME控件;新的Glade-3不再直接支持生成编程语言源代码

外观和感觉[

提供不同的显示引擎使得最终用户可以定制外观和感觉。目前已经有一些可以模仿其他流行的平台或者工具箱(例如Windows 95MotifQt或者NEXTSTEP)的引擎。

使用

使用GTK的环境

  • GNOME是以GTK+为基础,就是说为GNOME编写的程序使用GTK+ 做为其工具箱。
  • Xfce也基于GTK+,但是它的应用程序并不对很多其他程序有依赖。(这就是"GNOME程序"和"GTK+程序"的不同。)
  • LXDE也基于GTK+,一个尽可能减少包相依性的桌面环境。
  • GPE Palmtop环境和Nokia互联网平板电脑的框架Maemo基于GTK+。

这只是一部分,另外GTK+ 也可以运行在KDE的环境下。而且GTK+ 也可以在Microsoft Windows运行,另外还有DirectFBncurses

使用GTK的窗口管理器

GTK+应用程序

以下程序都是使用GTK+开发、属于开源软件,可以运行于LinuxUnixWindowsMac等多种操作系统平台上。

  • Firefox-Mozilla基金会的网页浏览器。
  • Geany-代码编辑器
  • GIMP-类似于Photoshop的图像处理程序
  • Inkscape-类似于IllustratorCorelDraw的矢量图形绘制工具
  • Pidgin-支持多种协议(IRC、Gtalk、Yahoo Talk、MSN等等)的聊天工具
  • gcin-一种在Linux、Windows系统上常见的输入法平台

主要版本

发布日期

主要增强

最后次要版本

1.0

1998年4月14日

第一个稳定版本

1.0.6

1.2

1999年2月27日

新增部件(GtkFontSelector、GtkPacker、GtkItemFactory、GtkCTree、GtkInvisible、GtkCalendar、GtkLayout、GtkPlug、GtkSocket)

1.2.10

2.0

2002年3月11日

GObject, UnicodeUTF-8)支持

2.0.9

2.2

2002年12月22日

Multihead support

2.2.4

2.4

2004年3月16日

新增部件(GtkFileChooser、GtkComboBox、GtkComboBoxEntry、GtkExpander、GtkFontButton、GtkColorButton)

2.4.14

2.6

2004年12月16日

New widgets (GtkIconView, GtkAboutDialog, GtkCellView).
最后一个支持Windows 98/Me的版本

2.6.10

2.8

2005年8月13日

Cairo integration

2.8.20

2.10

2006年7月3日

新增部件(GtkStatusIcon、GtkAssistant、GtkLinkButton、GtkRecentChooser)以及打印支持(GtkPrintOperation)

2.10.14

2.12

2007年9月14日

GtkBuilder

2.12.12

2.14

2008年9月4日

Jpeg2000 load support

2.14.7

2.16

2009年3月13日

New GtkOrientable, Caps Lock warning in password Entry.
Improvement on GtkScale, GtkStatusIcon, GtkFileChooser.

2.16.6

2.18

2009年9月23日

New GtkInfoBar. Improvement on file chooser, printing.
GDK has been rewritten to use 'client-side windows'

2.18.9

2.20

2010年3月23日

New GtkSpinner and GtkToolPalette, GtkOffscreenWindow. Improvement on file chooser,
keyboard handling, GDK.Introspection data is now included in GTK+

2.20.1

2.22

2010年9月23日

gdk-pixbuf moved to separate module, most GDK drawing are based on Cairo,
many internal data are now private and can be sealed in preparation to GTK+3

2.22.1

2.24

2011年1月30日

New simple combo box widget (GtkComboBoxText) added, the cups print backend can send print jobs as PDF,
GtkBuilder has gained support for text tags and menu toolbuttons and many introspection annotation fixes were added

2.24.0

3.0

2011年2月10日

Cairo, more X11 agnostic, XInput2, CSS-based theme API

3.0.0

图形无关代码

最初GTK+包括一些和图形无关的常规功能,如链表二叉树数据结构。这些基本功能和对象系统GObject已经合并到独立的Glib,它被程序员专门用于开发不需要图形界面的代码。

GTK+ 2

2002年3月11日,GTK+2.0版正式发布。GTK+ 2是GTK+ 后继版本,其新特性包括使用Pango改进的文本渲染、新主题引擎、使用ATK改进的可达性、完全转换到使用UTF-8Unicode和更灵活的API。但是它和GTK+ 1不完全兼容,因此必须由程序员做移植工作。由于GTK+ 1更快、相对更简单或更加适合嵌入式应用,所以还被继续使用。

从GTK+ 2的2.8版起,它依靠Cairo完成渲染,而这引入了矢量图形的支持。

发展

Ridley项目正在尝试统一一系列和GTK+相关的库,包括libgnome、libgnomeui、libgnomeprint、libgnomeprintui、libglade、libgnomecanvas、libegg、libeel和gtkglext。

GTK+ hello world

GTK+ hello world以C撰写,这支程序含有视窗,标题为"Hello, World".

 #include <gtk/gtk.h>

 int main (int argc, char *argv[])
 {
    GtkWidget *window;
    GtkWidget *label;

    gtk_init (&argc, &argv);

    /* create the main, top level, window */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    /* give it the title */
    gtk_window_set_title (GTK_WINDOW (window), "Hello World");

    /* Connect the destroy signal of the window to gtk_main_quit
     * When the window is about to be destroyed we get a notification and
     * stop the main GTK+ loop
     */
    g_signal_connect (window, "destroy",
                      G_CALLBACK (gtk_main_quit), NULL);

    /* Create the "Hello, World" label  */
    label = gtk_label_new ("Hello, World");

    /* and insert it into the main window  */
    gtk_container_add (GTK_CONTAINER (window), label);

    /* make sure that everything, window and label, are visible */
    gtk_widget_show_all (window);
 
    /* start the main loop, and let it rest there until the application is closed */
    gtk_main ();

    return 0;
 }


 

GTK+ Runtime Environment for Windows

由于GTK主要是作为Unix-like系统底下的接口,在Windows使用该系统所开发的软件时就需要用到GTK+ 运行环境,即GTK+ Runtime Environment for Windows。这个软件与GTK+不同的地方在于它仅仅是为了运行软件用途而制作,以解决Windows没有内置GTK+库的问题。

参见

外部链接

 

免责声明:文章转载自《GTK简单了解记录》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇swoole的UDP服务使用idea git cherry-pick, 将一个分支的commit, git push到另一个分支下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

嵌入式linux GUI--DirectFB + GTK至尊秘笈

1 前言 数年前,曾经开发过一个嵌入式的产品,如今市场依然存在,但由于电子产品的升级换代很快,许多元器件都采购不到了,为了延续产品的生命周期,计划在linux平台上开发新的版本。而在linux上的GUI上成了大问题,最开始有用Minigui的打算,也同飞漫公司联系过,但费用我这里无法承受。(Minigui作为国产优秀的嵌入式GUI,如果不是费...

virt viewer Usbredir USB重定向

编译virt viewer之前执行的configure命令,是没有使能usb-redir相关的功能,virt viewer是否支持usbredir是完全依赖于spice-gtk的。 virt viewer对spice-gtk的依赖关系,可以从virt viewer的configure结果看出来: [html]view plaincopy confi...

Linux GTK编程示例

1 #include <gtk/gtk.h> 2 3 static void helloWorld(GtkWidget *wid, GtkWidget *win) 4 { 5 GtkWidget *dialog = NULL; 6 dialog = gtk_message_dialog_new(GTK_WINDOW...

Linux图形界面开发—monodevelop初探

在ubutu10.04下,如果通过源码安装monodevelop有问题,建议用ubuntu自带的软件包管理器安装。 下面通过几个例子测试下monodevelop (1)控制台应用程序 u 强大的界面于windows下的vs差不多。输入项目的名称,保存位置,解决方案的名称,保存位置,与windows下一样的哦,其他设置都默认。 一切都是那么的熟悉,c#代码...

g_signal_connect 与 g_signal_connect_swapped

在 2.0 版,信号系统已从 GTK 移到 GLib,因此在函数和类型的说明中有前缀 "g_" 而不是 "gtk_"。我们不打算介绍 GLib 2.0 信号系统相对 GTK 1.2 信号系统扩展的细节。 在我们详细分析helloworld程序之前,我们会讨论信号和回调函数。GTK 是一个事件驱动的工具包,意味着它会等在 gtk_main() 那里,直到下...

C语言基于GTK+Libvlc实现的简易视频播放器(二)

简易视频播放器-全屏播放 一、课程说明上一次我们使用gtk+libvlc实现了一个最简单的视频播放器,可以实现点击按钮暂定和停止播放视频,以及同步显 示视频播放进度,但即使作为一个视频播放器,只有这些功能也还是不够的,至少我们还应该有全屏播放的功能吧,所以这一次我们就来为上一次的视频播放器添加 上全屏播放功能。这个功能实现起来思路很简单,只是具体实现过程...