我在 Python 中遇到了 Gobject Introspection 的问题。我试图通过 DBUS 访问 Rhythmbox,我可以访问 org.mpris.MediaPlayer2.Player 内部的方法,但我试图为 org.mpris.MediaPlayer2.Player 的属性设置值,这对我不起作用。
from gi.repository import Gio
connection = Gio.bus_get_sync(Gio.BusType.SESSION, None)
player = Gio.DBusProxy.new_sync(connection, 0, None, 'org.gnome.Rhythmbox3', '/org/mpris/MediaPlayer2', 'org.mpris.MediaPlayer2.Player', None)
properties = Gio.DBusProxy.new_sync(connection, 0, None, 'org.gnome.Rhythmbox3', '/org/mpris/MediaPlayer2', 'org.freedesktop.DBus.Properties', None)
我可以使用像 player.PlayPause() 这样的方法。当我尝试
properties.Set('org.mpris.MediaPlayer2.Player.rhythmbox', 'Volume', data)
我收到一条错误消息:
Unhandled Error
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/twisted/python/log.py", line 69, in callWithContext
return context.call({ILogContext: newCtx}, func, *args, **kw)
File "/usr/lib/python2.7/site-packages/twisted/python/context.py", line 118, in callWithContext
return self.currentContext().callWithContext(ctx, func, *args, **kw)
File "/usr/lib/python2.7/site-packages/twisted/python/context.py", line 81, in callWithContext
return func(*args,**kw)
File "/usr/lib/python2.7/site-packages/twisted/internet/posixbase.py", line 626, in _doReadOrWrite
why = selectable.doRead()
--- <exception caught here> ---
File "/usr/lib/python2.7/site-packages/twisted/internet/udp.py", line 147, in doRead
self.protocol.datagramReceived(data, addr)
File "RhythmboxDbus.py", line 27, in datagramReceived
properties.Set('org.mpris.MediaPlayer2.Player.rhythmbox', 'Volume', data)
File "/usr/lib/python2.7/site-packages/gi/overrides/Gio.py", line 156, in __call__
arg_variant = GLib.Variant(signature, tuple(args))
File "/usr/lib/python2.7/site-packages/gi/overrides/GLib.py", line 185, in __new__
(v, rest_format, _) = creator._create(format_string, [value])
File "/usr/lib/python2.7/site-packages/gi/overrides/GLib.py", line 68, in _create
v = constructor(args[0])
File "/usr/lib/python2.7/site-packages/gi/types.py", line 76, in constructor
return info.invoke(cls, *args, **kwargs)
exceptions.TypeError: Must be string, not tuple