[PyQt] QtDBus: Calling a method with an Array of Strings signature with Python 3

Phil Thompson phil at riverbankcomputing.com
Mon Dec 5 08:44:00 GMT 2011


On Sun, 04 Dec 2011 20:17:52 +0000, Chris Mayo
<cjmayo at users.sourceforge.net> wrote:
> With Python 2 I can do (where /dev/sr0 is a cdrom):
> 
> bus = QtDBus.QDBusConnection.systemBus()
> device_iface = QtDBus.QDBusInterface('org.freedesktop.UDisks',
> 	'/org/freedesktop/UDisks/devices/sr0', 'org.freedesktop.UDisks.Device',

> bus)
> reply = device_iface.call("DriveEject", QStringList())
> 
> 
> But with Python 3 this won't work because of QStringList. If I modify it

> with:
> 
> reply = device_iface.call("DriveEject", ["", ])
> print(reply.errorMessage())
> 
> I get:
> 
> Method "DriveEject" with signature "av" on interface 
> "org.freedesktop.UDisks.Device" doesn't exist
> 
> Chris
> 
> PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4

Try this...

arg = QDBusArgument()
arg.beginArray(QMetaType.QString)
arg.add("")
arg.endArray()

...and pass arg to call().

If that works I'll change QDBusArgument so that you can do...

   call("DeviceEject", QDBusArgument([""], QMetaType.QStringList))

Phil


More information about the PyQt mailing list