Re: [PyQt] QtDBus not wrapped, trouble using dbus-python (communication hangs)
I'm happy to share that PyKDE4 + dbus-python seems to work without problems with Qt 4.4-rc1. Thanks to Jonathan Riddell for the heads up. Cheers, -- Adeodato Simó dato at net.com.org.es Debian Developer adeodato at debian.org The surest way to corrupt a youth is to instruct him to hold in higher esteem those who think alike than those who think differently. -- F. Nietzsche ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
no cookie :-( (Re: [PyQt] QtDBus not wrapped, trouble using dbus-python (communication hangs))
* Adeodato Simó [Fri, 14 Mar 2008 10:55:15 +0100]: * Jim Bublitz [Thu, 13 Mar 2008 15:41:30 -0800]: Setting some of the fields in KAboutData also sets some info that DBus uses (name, domain info?) - setting it incorrectly (like putting the .py extension on the name) also causes problems. I'd also try changing QMainWindow to KMainWindow or KXmlGuiWindow. Right, using KMainwindow or KXmlGuiWindow in the provided example does not work. Other than that (actually including that), I have no clue. Haven't seen any KDE docs on it either, although you could try kde.org. Grumble grumble. I'll poke at it a bit more, but I'm mostly blind on this. :-( Ok, after spending a long time messing with this and trying all the combinations I could think of, I haven't arrived anywhere: either I get the QMutex deadlock, or invoking the remote method hangs. If somebody with the knowledge to debug this could assist, I would be very very grateful. Thanks, -- Adeodato Simó dato at net.com.org.es Debian Developer adeodato at debian.org One of my most productive days was throwing away 1000 lines of code. -- Ken Thompson ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus not wrapped, trouble using dbus-python (communication hangs)
* Jim Bublitz [Thu, 13 Mar 2008 15:41:30 -0800]: On Thursday 13 March 2008 15:50, Adeodato Simó wrote: * Phil Thompson [Thu, 13 Mar 2008 22:03:08 +]: You need to create the QApplication before the main loop. Oh, changing that makes the example work, thank you. However, if I change QApplication to KApplication, I get this error: QMutex::lock: Deadlock detected in thread -1210529600 And the application hangs. Any ideas? Setting some of the fields in KAboutData also sets some info that DBus uses (name, domain info?) - setting it incorrectly (like putting the .py extension on the name) also causes problems. I'd also try changing QMainWindow to KMainWindow or KXmlGuiWindow. Right, using KMainwindow or KXmlGuiWindow in the provided example does not work. Other than that (actually including that), I have no clue. Haven't seen any KDE docs on it either, although you could try kde.org. Grumble grumble. I'll poke at it a bit more, but I'm mostly blind on this. :-( Thanks, -- Adeodato Simó dato at net.com.org.es Debian Developer adeodato at debian.org I promise you. Once I enter into an exclusive relationship, I sleep with very few people. -- Denny Crane ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
[PyQt] QtDBus not wrapped, trouble using dbus-python (communication hangs)
Hello. I've read in the list archives that QtDBus is not wrapped because there would be severe limitations in the bindings, and a more pythonic version of the bindings exists (dbus-python). However, I'm having trouble with exporting an interface using those bindings. I've started with the example-service.py file that comes with dbus-python, and I've changed it to be a Qt mini-app with the following diff (full file attached): --- example-service.py~ +++ example-service.py @@ -30,11 +30,13 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -import gobject +import sys import dbus import dbus.service -import dbus.mainloop.glib +import dbus.mainloop.qt + +from PyQt4 import QtGui class DemoException(dbus.DBusException): _dbus_error_name = 'com.example.DemoException' @@ -71,13 +73,13 @@ if __name__ == '__main__': -dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) +dbus.mainloop.qt.DBusQtMainLoop(set_as_default=True) session_bus = dbus.SessionBus() name = dbus.service.BusName(com.example.SampleService, session_bus) object = SomeObject(session_bus, '/SomeObject') -mainloop = gobject.MainLoop() -print Running example service. -print usage -mainloop.run() +app = QtGui.QApplication(sys.argv) +mw = QtGui.QMainWindow() +mw.show() +app.exec_() The application starts, with this warning: QSocketNotifier: Can only be used with threads started with QThread QSocketNotifier: Can only be used with threads started with QThread qdbus lists the service, but trying to lists its objects hangs, and sending a message does not work either: % qdbus | grep example com.example.SampleService % qdbus com.example.SampleService / Cannot introspect object / at com.example.SampleService: org.freedesktop.DBus.Error.NoReply (Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.) % qdbus com.example.SampleService /SomeObject com.example.SampleInterface.HelloWorld hello Interface 'com.example.SampleInterface' not available in object /SomeObject at com.example.SampleService: org.freedesktop.DBus.Error.NoReply (...) Any ideas? -- Adeodato Simó dato at net.com.org.es Debian Developer adeodato at debian.org People are more violently opposed to fur than leather because it's safer to harass rich women than motorcycle gangs. #!/usr/bin/env python usage = Usage: python example-service.py python example-client.py python example-async-client.py python example-client.py --exit-service # Copyright (C) 2004-2006 Red Hat Inc. http://www.redhat.com/ # Copyright (C) 2005-2007 Collabora Ltd. http://www.collabora.co.uk/ # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the Software), to deal in the Software without # restriction, including without limitation the rights to use, copy, # modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. import sys import dbus import dbus.service import dbus.mainloop.qt from PyQt4 import QtGui class DemoException(dbus.DBusException): _dbus_error_name = 'com.example.DemoException' class SomeObject(dbus.service.Object): @dbus.service.method(com.example.SampleInterface, in_signature='s', out_signature='as') def HelloWorld(self, hello_message): print (str(hello_message)) return [Hello, from example-service.py, with unique name, session_bus.get_unique_name()] @dbus.service.method(com.example.SampleInterface, in_signature='', out_signature='') def RaiseException(self): raise DemoException('The RaiseException method does what you might ' 'expect') @dbus.service.method(com.example.SampleInterface, in_signature='', out_signature='(ss)') def GetTuple(self): return (Hello Tuple, from example-service.py) @dbus.service.method(com.example.SampleInterface,
Re: [PyQt] QtDBus not wrapped, trouble using dbus-python (communication hangs)
On Thursday 13 March 2008, Adeodato Simó wrote: Hello. I've read in the list archives that QtDBus is not wrapped because there would be severe limitations in the bindings, and a more pythonic version of the bindings exists (dbus-python). However, I'm having trouble with exporting an interface using those bindings. I've started with the example-service.py file that comes with dbus-python, and I've changed it to be a Qt mini-app with the following diff (full file attached): --- example-service.py~ +++ example-service.py @@ -30,11 +30,13 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -import gobject +import sys import dbus import dbus.service -import dbus.mainloop.glib +import dbus.mainloop.qt + +from PyQt4 import QtGui class DemoException(dbus.DBusException): _dbus_error_name = 'com.example.DemoException' @@ -71,13 +73,13 @@ if __name__ == '__main__': -dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) +dbus.mainloop.qt.DBusQtMainLoop(set_as_default=True) session_bus = dbus.SessionBus() name = dbus.service.BusName(com.example.SampleService, session_bus) object = SomeObject(session_bus, '/SomeObject') -mainloop = gobject.MainLoop() -print Running example service. -print usage -mainloop.run() +app = QtGui.QApplication(sys.argv) +mw = QtGui.QMainWindow() +mw.show() +app.exec_() The application starts, with this warning: QSocketNotifier: Can only be used with threads started with QThread QSocketNotifier: Can only be used with threads started with QThread qdbus lists the service, but trying to lists its objects hangs, and sending a message does not work either: % qdbus | grep example com.example.SampleService % qdbus com.example.SampleService / Cannot introspect object / at com.example.SampleService: org.freedesktop.DBus.Error.NoReply (Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.) % qdbus com.example.SampleService /SomeObject com.example.SampleInterface.HelloWorld hello Interface 'com.example.SampleInterface' not available in object /SomeObject at com.example.SampleService: org.freedesktop.DBus.Error.NoReply (...) Any ideas? You need to create the QApplication before the main loop. Phil ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus not wrapped, trouble using dbus-python (communication hangs)
* Phil Thompson [Thu, 13 Mar 2008 22:03:08 +]: You need to create the QApplication before the main loop. Oh, changing that makes the example work, thank you. However, if I change QApplication to KApplication, I get this error: QMutex::lock: Deadlock detected in thread -1210529600 And the application hangs. Any ideas? Thanks, -- Adeodato Simó dato at net.com.org.es Debian Developer adeodato at debian.org I went to the race track once and bet on a horse that was so good that it took seven others to beat him! ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus not wrapped, trouble using dbus-python (communication hangs)
On Thursday 13 March 2008 15:50, Adeodato Simó wrote: * Phil Thompson [Thu, 13 Mar 2008 22:03:08 +]: You need to create the QApplication before the main loop. Oh, changing that makes the example work, thank you. However, if I change QApplication to KApplication, I get this error: QMutex::lock: Deadlock detected in thread -1210529600 And the application hangs. Any ideas? Setting some of the fields in KAboutData also sets some info that DBus uses (name, domain info?) - setting it incorrectly (like putting the .py extension on the name) also causes problems. I'd also try changing QMainWindow to KMainWindow or KXmlGuiWindow. Other than that (actually including that), I have no clue. Haven't seen any KDE docs on it either, although you could try kde.org. Jim ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt