在 Python 中定义一个 GLib.Variant
Define a GLib.Variant in Python
我正在尝试在 Python 中定义一个 GLib.Variant
数据类型,以便将其与 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}
这样的字典吗?
选项参数的类型为 a{sv}
,因此您可能需要明确提供类型:
options = GLib.Variant('a{sv}', {
'draw-cursor': GLib.Variant('b', False),
'framerate': GLib.Variant('i', 30),
})
第二次失败(AttributeError: 'Variant' object has no attribute 'items'
)似乎是因为pydbus
希望你传入一个dict
,而不是GLib.Variant
,它无条件地包装任何东西你在 GLib.Variant
中传递它。这意味着它试图从 options
变体中获取 items
,但失败了,因为 GLib.Variant
不支持。
此代码适用于 pydbus
:
calling.Screencast('out.webm', {
'draw-cursor': GLib.Variant('b', False),
'framerate': GLib.Variant('i', 30)
})
我正在尝试在 Python 中定义一个 GLib.Variant
数据类型,以便将其与 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}
这样的字典吗?
选项参数的类型为 a{sv}
,因此您可能需要明确提供类型:
options = GLib.Variant('a{sv}', {
'draw-cursor': GLib.Variant('b', False),
'framerate': GLib.Variant('i', 30),
})
第二次失败(AttributeError: 'Variant' object has no attribute 'items'
)似乎是因为pydbus
希望你传入一个dict
,而不是GLib.Variant
,它无条件地包装任何东西你在 GLib.Variant
中传递它。这意味着它试图从 options
变体中获取 items
,但失败了,因为 GLib.Variant
不支持。
此代码适用于 pydbus
:
calling.Screencast('out.webm', {
'draw-cursor': GLib.Variant('b', False),
'framerate': GLib.Variant('i', 30)
})