编程语言
首页 > 编程语言> > 尝试将Gtk.Application与python一起使用,但无法处理open

尝试将Gtk.Application与python一起使用,但无法处理open

作者:互联网

我试图拥有一个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, '')

有谁知道为什么这个断言失败了,为什么我得到了一个空文件列表?

尽管这项任务看起来很常见,但我也无法在线找到任何可行的示例.

解决方法:

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, '')

标签:gtk3,python
来源: https://codeday.me/bug/20191127/2075180.html