2017-02-05 39 views
0

Я пытаюсь определить тип данных GLib.Variant в Python, чтобы использовать его с библиотекой pydbus. Это моя попытка сделать так:Определить GLib.Variant в Python

#!/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}?

ответ

0

Вторая неудача (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) 
}) 
1

опции аргумент имеет тип a{sv}, так что вы, вероятно, необходимо явно предоставить типы:

options = GLib.Variant('a{sv}', { 
    'draw-cursor': GLib.Variant('b', False), 
    'framerate': GLib.Variant('i', 30), 
}) 
+0

Теперь он говорит: 'AttributeError: объект 'Variant' не имеет атрибута«items''. Я не знаю, была ли эта ошибка самой GLib. – Madno

+0

Это работает для меня; это, кстати, последний GLib и Python 3. – ptomato

+0

Ну, у меня тоже. Но это дает ошибку. Полный код: https://pastebin.mozilla.org/8976332 Право? – Madno

 Смежные вопросы

  • Нет связанных вопросов^_^