试图使用python的Gtk.Application,但无法处理打开

时间:2012-10-02 18:39:56

标签: python gtk3

我正在尝试使Gtk.Application保持唯一并处理打开的文件。我在Ubuntu 12.04上使用python 2.7.3和Gtk3(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, '')

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

正如这项任务似乎很常见,我也找不到任何在线工作示例。

1 个答案:

答案 0 :(得分:3)

PyGObject中存在一个错误。它已在GNOME Bugzilla中报告,请查看标题为“Does not handle GFile in signal arguments”的错误报告。

更新:该错误已于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, '')