I'm working on an app that needs to invoke methods in various D-Bus services asynchronously, so I wrote this small program to test the basic machinery:
from PyQt4 import QtCore, QtDBus class DeviceInterface(QtDBus.QDBusAbstractInterface): def __init__(self, service, path, connection, parent=None): super().__init__(service, path, 'org.freedesktop.UDisks.Device', connection, parent) @QtCore.pyqtSlot(QtDBus.QDBusArgument) def callFinishedSlot(self, arg): print("Got result:", arg) if __name__ == '__main__': import sys app = QtCore.QCoreApplication(sys.argv) dev = DeviceInterface('org.freedesktop.UDisks.Device', '/org/freedesktop/UDisks/Device/sda1', QtDBus.QDBusConnection.systemBus(), app) async = dev.asyncCall("FilesystemListOpenFiles"); watcher = QtDBus.QDBusPendingCallWatcher(async, dev) watcher.finished.connect(dev.callFinishedSlot) sys.exit(app.exec_()) It seems to work(?) Anyway, it prints: Got result: <PyQt4.QtDBus.QDBusPendingCallWatcher object at 0xb740c77c> The trouble is, I can't figure out how to get results out of the QDBusPendingCallWatcher object. The C++ code I adapted the above example from does this: void MyClass.callFinishedSlot(QDBusPendingCallWatcher *call) { QDBusPendingReply<QString, QByteArray> reply = *call; if (reply.isError()) { showError(); } else { QString text = reply.argumentAt<0>(); QByteArray data = reply.argumentAt<1>(); showReply(text, data); } call->deleteLater(); } Can anyone suggest how I might convert the C++ slot syntax to something that will work with PyQt? Thanks! _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt