在 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)
})