undefined reference to GTK_TEXT

undefined reference to GTK_TEXT

出错信息:

undefined reference to GTK_TEXT

解决方法:

#include前定义:#define GTK_ENABLE_BROKEN

原因:

现在的Gtk+中默认不支持GtkText构件,而使用GtkTextView构件来代替。如果要使用GtkText构件,则必须在包含gtk.h头文件前定义GTK_ENABLE_BROKEN#define GTK_ENABLE_BROKEN

glib data type

Glib数据类型

       Glib提供了自己的一组在GTK+GNOME开发中使用的替代标准C数据类型的数据类型。这样做的原因不仅是便于阅读和使用,而且还便于移植。不管在何种平台上编译应用程序,许多平台对数据的尺寸和运算都会具有许多相同的限制。Glib数据类型保证不管什么样的系统和平台,都是相同的大小。

       Glib的数据类型

数据类型

说明

gboolean

真假或开关的值,一般与Glib定义的TRUEFALSE常量使用

gpointer

对应与void *,但是可读性更强

gcharguchar

对应一个字符和一个无符号字符

gintguintgshort

取代标准c的相应类型

glonggulong

长度根据硬件和操作系统体系结构的不同而变化

gint8guint8gint16

guint16gint32guint32

gint64guint64

具有已知长度的有符号和无符号整数数据类型。对于64位有符号和无符号整数值,仅在范围有限的机器上支持

gfloatgdouble

取代c语言提供的floatdouble

gsize

用来保存数据结构和数据类型尺寸的无符号数据类型

gssize

用来保存数据结构和数据类型尺寸的有符号数据类型

       上述这些类型,可以保证一致性和可读性。不管编译应用程序的平台是什么,定义一组具有可保证长度的数据类型将是一种很好的想法,同时笔记guchar减少了击键次数(unsigned char)。

       测试了一下每种数据类型所占的字节数:

#include <glib.h>
gint main(gint argc,gchar *argv[])
{
    g_print("The length of gboolean is %dn",sizeof(gboolean));
    g_print("The length of gpointer is %dn",sizeof(gpointer));
    g_print("The length of gchar    is %dn",sizeof(gchar));
    g_print("The length of guchar   is %dn",sizeof(guchar));
    g_print("The length of gint     is %dn",sizeof(gint));
    g_print("The length of guint    is %dn",sizeof(guint));
    g_print("The length of gshort   is %dn",sizeof(gshort));
    g_print("The length of glong    is %dn",sizeof(glong));
    g_print("The length of gulong   is %dn",sizeof(gulong));
    g_print("The length of gint8    is %dn",sizeof(gint8));
    g_print("The length of guint8   is %dn",sizeof(guint8));
    g_print("The length of gint16   is %dn",sizeof(gint16));
    g_print("The length of guint16  is %dn",sizeof(guint16));
    g_print("The length of gint32   is %dn",sizeof(gint32));
    g_print("The length of guint32  is %dn",sizeof(guint32));
    g_print("The length of gint64   is %dn",sizeof(gint64));
    g_print("The length of guint64  is %dn",sizeof(guint64));
    g_print("The length of gfloat   is %dn",sizeof(gfloat));
    g_print("The length of gdouble  is %dn",sizeof(gdouble));
    g_print("The length of gsize    is %dn",sizeof(gsize));
    g_print("The length of gssize   is %dn",sizeof(gssize));
    return 0;
}

clip_image002

Learning pygtk

PyGtk 学习笔记

1.PyGtk简介

PyGtk是一套用Python封装的GTK 的图形库,通过Python编程语言使用PyGtk图形库可以轻松的写出GUI程序。它是GNOME项目的一部分。PyGTK是基于LGPL许可之下的免费软件。其原始作者是James HenstridgePyGTK非常容易使用,对于速成原型法,它是相当理想的。普遍地认为,PyGTK是最流行的GTK 库封装中的一种。

其中PyGtk包含几个模块:GObjectATKGTKPangoCairoClade
GObject
是基类,它为PyGTK
所以类提供通用的属性和函数。

·         ATK 是一个提供辅助功能的工具包。该工具包提供了帮助残障人士使用计算机的各种工具。

·         GTK 是用户界面模块。

·         Pango是一个用于处理文本和国际化的库。

·         Cairo是一个用于创建2D矢量模型的库。

·         Glade是用来从XML描述中构建GUI界面。

如果你是Linux用户的话,不必担心安装配置问题,目前大部分Linux发行版中都包含了PythonPyGtk,所以直接用就行了。

2.从一个简单示例开始

先上图,接下来的程序效果如下图:

clip_image002

很简单的一个窗口,下面是实现它的完整代码:

#!/usr/bin/python

#-*- encoding:utf-8 -*-

#建立一个窗口

 

import gtk

class PyApp(gtk.Window):

    def __init__(self):

        super(PyApp, self).__init__()

        self.set_title(“PyGtk”)

        self.set_size_request(250, 150)

        self.set_position(gtk.WIN_POS_CENTER)

 

        self.connect(“destroy”, gtk.main_quit)

 

        self.show()

 

    def main(self):

        gtk.main()

 

print __name__

if __name__ == “__main__”:

    pyapp = PyApp()

    pyapp.main()

使用PyGtk当然要有一定的Python基础,把上述代码保存为pygtkwin.py,在控制台执行如下命令就能看到一个窗口了。

python pygtkwin.py

简单分析一下代码:

import gtk

这里是导入PyGtkgtk模块。

self.set_title(“PyGtk”)

self.set_size_request(250, 150)

self.set_position(gtk.WIN_POS_CENTER)

这里的PyApp继承至GTK的窗口类,即gtk.Window。上面的set分别是设置窗口标题、窗口尺寸、窗口位置。

self.connect(“destroy”, gtk.main_quit)

这里的connect是把该类的destroy事件绑定到gtk.main_quit方法上。效果就是点击窗口的关闭按钮,就会销毁整个装口。

self.show()

用来现实这个窗口。

gtk.main()

使用于启动GTK的循环,来保持窗口的运行。