> Try this... > > def callFinishedSlot(self, call): > reply = QtDBus.QPyDBusPendingReply(call)
Thanks, Phil. It doesn't work for me yet, I'm getting: >>> call <PyQt4.QtDBus.QDBusPendingCallWatcher object at 0x9e9538c> >>> reply = QtDBus.QPyDBusPendingReply(call) Traceback (most recent call last): File "<string>", line 1, in <fragment> builtins.AttributeError: 'module' object has no attribute 'QPyDBusPendingReply' I'm now looking through the build setup to see whether there's some config setting I missed that is keeping the qpy stuff from getting built. Any suggestions? (I built from the PyQt4.9.4 release tarball; do I need to use a development snapshot instead?) On Mon, Aug 13, 2012 at 4:43 AM, Phil Thompson <p...@riverbankcomputing.com> wrote: > On Sun, 12 Aug 2012 23:31:54 -0400, Evade Flow <evadef...@gmail.com> > wrote: >> 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! > > Try this... > > def callFinishedSlot(self, call): > reply = QtDBus.QPyDBusPendingReply(call) > > if reply.isError(): > self.showError() > else: > text = reply.argumentAt(0) > data = reply.argumentAt(1) > > ...etc. > > Phil _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt