• 16
  • Feb

最近要为Ubuntu Tweak加一个功能,需要用到文件的图标,即取得某个文件的类型图标。

怎么实现它呢?一点头绪也没有。翻了翻GTK+的引用手册,虽然有相关组件跟ICON操作有关,可是都非常底层,没有跟“取得文件类型的图标”有关。

只好下载来Nautilus的源码开始研究和分析。Nautilus的代码很多很复杂,不过没办法,暂时还没想到什么轻量级的软件跟类型图标显示有关。

研究了半天,终于有结果了。

-----

Nautilus不愧是代码规模超十万行的软件,源代码分得非常清楚和细致,有一个大中型软件所具备的结构。

看源码时就有这么感觉,即使没有找到我要的东西,但把源码分析清楚了,也有很大的收获了。

这里就对Nautilus的进行一点简单的分析:

Nautilus的大多数代码在libnautilus-private这里,这里定义了非常多的Nautilus的各种操作和界面显示,基本上都定义为类了。比如nautilus-icon-factory,即图标工厂,取得一个文件的图标,就是靠它了。

那么Nautilus是用什么来表示文件呢?直接对文件操作?不,Nautilus专门定义了一个nautilus-file的类型,用它来具体封装文件的类型,文件的URI,文件的尺寸,文件是否可执行,文件是否在垃圾筒中(这个都有:))……通过操作nautilus-file,来构成整个Nautilus。

其他的就不多说了,Nautillus定义了近100个类型呢!我想以后等水平高了,自己为Nautilus写扩展。哈哈~一直很喜欢Dolphin的分割视图和Column视图,如果Nautilus有就爽了!具体请看:http://linuxdesktop.cn/2007/11/23/kde4-rc-dolphin-widget

关于Nautilus的分析就不多作了,还没讲正文呢。

在GNOME环境下,取得文件类型的图标,实际上要用到libgnomeui的库! 使用gnome_icon_lookup ()就可以了,参数共有8个,可以实现非常丰富的图标查找功能,不过最少只需要一个GtkIconTheme的类和文件名即可。

下面是一段最简洁的Python实现的代码:

icontheme = gtk.icon_theme_get_default()

icon = ui.icon_lookup(icontheme,None,filename)

pixbuf = icontheme.load_icon(icon[0], 48, 0)

pixbuf即图标在内存的表示形式:Gdk.Pixbuf

嗯,就这样了。明天继续Coding。

Tags: GNOME, GTK, nautilus.

» You can leave a comment.

7 Comments

  1. 等着你出完。。希望有python实现的源码。。
    准备开始python。。

  2. kran

    为什么我安装好tweak后确运行不了?
    提示Permission denied
    如果sudo的话又找不到此命令?
    在菜单里同样执行不了也是Permission denied
    请问这是怎么回事?望解答,谢谢!

  3. @kran:
    Permission denied?怎么会出现这个。
    请问你是怎么安装的?哪个版本?你的Ubuntu是什么版本?

  4. kran

    谢谢!
    先python setup.py build
    然后sudo python setup.py install
    我是linux新手
    ubuntu是7.10版,tweak是0.2.6版

  5. 原来你是用这个方法安装的,这个引起的问题我很难判断,你提供的信息也有限。建议你用deb包安装吧。这样也方便删除。

  6. kran

    好的!非常感谢!

Leave a Comment