Определить 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),
})