Este exemplo requer:
python3-dbus.mainloop.pyqt5, python3-dbus
Exemplo de servidor:
import signal, sys
signal.signal(signal.SIGINT, signal.SIG_DFL)
from PyQt5.QtCore import *
import math
import dbus
import dbus.service
from dbus.mainloop.pyqt5 import DBusQtMainLoop
class Server(dbus.service.Object):
def __init__(self):
busName = dbus.service.BusName('org.documentroot.Fisticuffs', bus = dbus.SessionBus())
dbus.service.Object.__init__(self, busName, '/Fisticuffs')
#Insert subprocesses here...
@dbus.service.method('org.documentroot.Fisticuffs', in_signature = 's', out_signature = 's')
def move(self, a): return "Move recieved"
@dbus.service.method('org.documentroot.Fisticuffs', in_signature = 'dd', out_signature = 'd')
def add(self, a, b): return a+b
DBusQtMainLoop(set_as_default = True)
app = QCoreApplication(sys.argv)
server = Server()
app.exec_()
Exemplo de cliente:
import dbus
bus = dbus.SessionBus()
server = bus.get_object('org.documentroot.Fisticuffs', '/Fisticuffs')
print('5 and 10 are:')
print(server.add(5, 10, dbus_interface = 'org.documentroot.Fisticuffs'))
Créditos:
Adaptado de aqui para que o pyqt5 ouça Ctl + C
e aqui para atualizar um tutorial sobre como fazer com que um servidor dbus-python seja executado no mainloop do PyQt5 em python3.