我正在尝试使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, '')
有谁理解为什么断言失败以及为什么我得到一个空的文件列表?
正如这项任务似乎很常见,我也找不到任何在线工作示例。
答案 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, '')