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にバグがあります。すでにGNOMEBugzillaで報告されています。「シグナル引数で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 に答える