2

我正在尝试GLib.Variant在 Python 中定义一种数据类型以将其与pydbus库一起使用。这是我的尝试:

#!/usr/bin/python

from gi.repository import GLib
from pydbus import SessionBus

var1 = GLib.Variant.new_variant('draw-cursor', False)
var2 = GLib.Variant.new_variant('framerate', 30)

bus = SessionBus()
calling = bus.get('org.gnome.Shell.Screencast', '/org/gnome/Shell/Screencast')

calling.Screencast('out.webm', {var1, var2})

然而它说TypeError: GLib.Variant.new_variant() takes exactly 1 argument (2 given)。我可以清楚地看到这一点。但是,我怎样才能为我将定义的值分配?不应该像字典一样{'framerate': 30}吗?

4

2 回答 2

2

options 参数具有 type a{sv},因此您可能需要显式提供类型:

options = GLib.Variant('a{sv}', {
    'draw-cursor': GLib.Variant('b', False),
    'framerate': GLib.Variant('i', 30),
})
于 2017-02-05T17:47:14.560 回答
2

第二个失败(AttributeError: 'Variant' object has no attribute 'items')似乎是因为pydbus期望您传入 adict而不是 a GLib.Variant,并且它无条件地将您传入的任何内容包装 a GLib.Variant。这意味着它试图items从变体中获取,但由于不支持options而失败。GLib.Variant

此代码适用于pydbus

calling.Screencast('out.webm', {
    'draw-cursor': GLib.Variant('b', False),
    'framerate': GLib.Variant('i', 30)
})
于 2017-03-03T10:38:23.637 回答