Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中定义GLib.Variant_Python_Glib_Dbus_Gvariant - Fatal编程技术网

在Python中定义GLib.Variant

在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

我试图在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\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。我也有同样的。然而,它产生了错误。完整的代码是:对吗?您没有说错误来自
屏幕广播
呼叫。你确定你首先需要传递一个变体吗?当然可以。除了许多其他地方之外,在一些文档中也提到了它。这也是一个例子: