4

我试图让 Gtk.Application 保持唯一并处理打开的文件。我在带有 Gtk3 的 Ubuntu 12.04 上使用 python 2.7.3(对 python 和 Gtk 来说都是新的)

该应用程序在没有参数的情况下运行良好,但是当我运行它试图打开文件时它无法获取文件列表。这是代码,尽可能简约:

#!/usr/bin/env python
import sys
from gi.repository import Gtk, Gio

def do_open(app, files, *hint):
    print(app)
    print(files)
    print(hint)

def do_activate(app):
    print "activate"

test = Gtk.Application(application_id="a.b", flags=Gio.ApplicationFlags.HANDLES_OPEN)
test.set_inactivity_timeout(10000)
test.connect("open", do_open)
test.connect("activate", do_activate)
test.run(sys.argv)

当我不带参数运行程序时,它只会打印“激活”,这很好。当我使用参数(如 ./test.py test.py)运行它时,我得到以下信息:

/usr/lib/python2.7/dist-packages/gi/types.py:43: Warning: g_value_get_boxed: assertion `G_VALUE_HOLDS_BOXED (value)' failed
return info.invoke(*args, **kwargs)
<Application object at 0x1c75230 (GtkApplication at 0x1cba0b0)>
[]
(1, '')

有谁明白为什么该断言失败以及为什么我得到一个空的文件列表?

尽管这个任务看起来很常见,但我也无法在网上找到任何工作示例。

4

1 回答 1

4

PyGObject 中有一个错误。它已在 GNOME Bugzilla 中报告,请查看标题为“不处理信号参数中的 GFile ”的错误报告。

更新:该错误已在 2013 年修复。不再断言,它返回文件列表 (GFiles)。换句话说,代码按预期工作(至少使用 3.14):

$ python test.py test.py
<Application object at 0x7fcaf18f5d20 (GtkApplication at 0x11892b0)>
[<__main__.GLocalFile object at 0x7fcaf18a6050 (GLocalFile at 0x11aea00)>]
(1, '')
于 2012-10-13T19:05:15.157 回答