[PyQt] Passsing Unsigned Int to DBus

Bo Møller Petersen kemibo at gmail.com
Sun Feb 10 17:55:50 GMT 2019


I'm trying to use PyQt5's DBus module to interact with the KDE
PowerManagerAgent on a linux system. When calling the AddInhibition method
I need to send the first paramter as an uint32 (Unsigned int), but the code
sends the value as a singed int.

The code is written using Python 3 and using Pyqt5

class PowerChangeInhibitor:
    def __init__(self):
        self.dBusService = 'org.kde.Solid.PowerManagement.PolicyAgent'
        self.dBusPath = '/org/kde/Solid/PowerManagement/PolicyAgent'
        self.dBusInterface = 'org.kde.Solid.PowerManagement.PolicyAgent'
        self.cookies = []

    def ActivateInhibition(self, interruptSession, changeProfile,
changeScreenSettings,who, reason):


        self.dBus = QtDBus.QDBusConnection.sessionBus()
        if interruptSession:
            #dBusInterface = QtDBus.QDBusInterface(self.dBusService,
self.dBusPath,'' , self.dBus)
            #reply = dBusInterface.call('AddInhibition',1,who,reason)

            msg =
QtDBus.QDBusMessage.createMethodCall(self.dBusService,
self.dBusPath,self.dBusInterface,'AddInhibition')

            #unsignedValue = 1
          # writes 1 but typed as int32
            #unsignedValue = ctypes.c_uint(1)
          # Type not registered
            #unsignedValue = struct.unpack_from("I", struct.pack("i",
1))        # Type not registered
            #unsignedValue = QtCore.QByteArray(b'0x01')[0]
          # Type not registered
            #unsignedValue =  bytes(1)
          # Type not registered
            #unsignedValue = QtDBus.QDBusVariant(1)
          # array of bytes "0x01"
            #unsignedValue = QtDBus.QDBusVariant(1)[0]
          # QDBusVariant does not support indexing
            #unsignedValue =
QtDBus.QDBusVariant().setVariant(ctypes.c_uint(1))  # Variant
contained QVariantInvalid
            unsignedValue =  QtDBus.QDBusVariant(ctypes.c_uint(1))
           # Type not registered

            msg << *unsignedValue* << who << reason
            reply = QtDBus.QDBusReply(self.dBus.call(msg))
            if reply.isValid():
                self.cookies.append(reply.value())

  I have commented out previous attempts with their results on the
right. Using dbus-monitor I can see that the part where i'm
struggeling is getting QDBusInterface to emit the desired UNIT32 type
info.

Any pointers on how I pass an unsigned int as an argument to my QDBusMessage ?

Thanks in advance
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20190210/770ac751/attachment-0001.html>


More information about the PyQt mailing list