在Python中定义GLib.Variant
我试图在Python中定义一个在Python中定义GLib.Variant,python,glib,dbus,gvariant,Python,Glib,Dbus,Gvariant,我试图在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 = Sess
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\u Variant()只接受1个参数(给定2个)
。我看得很清楚。但是,我如何为我将要定义的内容分配值呢?它是否应该是一个类似于{'framerate':30}
?选项参数的类型为a{sv}
,因此您可能需要显式提供类型:
options = GLib.Variant('a{sv}', {
'draw-cursor': GLib.Variant('b', False),
'framerate': GLib.Variant('i', 30),
})
第二个失败(AttributeError:'Variant'对象没有属性'items'
)似乎是因为pydbus
希望您传入一个dict
,而不是一个GLib.Variant
,并且它无条件地将您传入的任何内容封装在GLib.Variant
中。这意味着它试图从选项
变量中获取项
,但失败的原因是GLib.variant
不支持该操作
此代码与pydbus一起工作:
calling.Screencast('out.webm', {
'draw-cursor': GLib.Variant('b', False),
'framerate': GLib.Variant('i', 30)
})
现在它说:
AttributeError:“Variant”对象没有属性“items”
。我不知道这是否是GLib本身的一个缺陷。它对我有效;顺便说一句,这是最新的GLib和Python 3。我也有同样的。然而,它产生了错误。完整的代码是:对吗?您没有说错误来自屏幕广播
呼叫。你确定你首先需要传递一个变体吗?当然可以。除了许多其他地方之外,在一些文档中也提到了它。这也是一个例子: