Определить GLib.Variant в Python

Я пытаюсь определить 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}?

2 ответа

Решение

Второй сбой (AttributeError: 'Variant' object has no attribute 'items'кажется, потому что pydbus ожидает, что вы пройдете в dict, а не GLib.Variantи это безоговорочно оборачивает все, что вы передаете в GLib.Variant, Это означает, что он пытается получить items от options вариант, который терпит неудачу, потому что GLib.Variant не поддерживает это.

Этот код работает с pydbus:

calling.Screencast('out.webm', {
    'draw-cursor': GLib.Variant('b', False),
    'framerate': GLib.Variant('i', 30)
})

Аргумент параметров имеет тип a{sv}так что вам, вероятно, нужно явно указать типы:

options = GLib.Variant('a{sv}', {
    'draw-cursor': GLib.Variant('b', False),
    'framerate': GLib.Variant('i', 30),
})
Другие вопросы по тегам