Программирование с DBus с использованием PyQt

Я пытаюсь написать среду рабочего стола, которая поддерживает глобальное меню. Прежде чем приступить к выполнению своей основной задачи В PyQt я пытаюсь заставить код dbus работать с QtDBus в качестве доказательства концепции. Вот довольно распечатанный вывод и подпись метода, которые я получил от d-футов:

GetMenus() -> (Array of [Struct of (Uint32,String,Object Path)] menus)

[(60817412L, u':1.155', '/com/canonical/menu/3A00004'),
 (58725289L, u':1.151', '/com/canonical/menu/38013A9'),
 (58720393L, u':1.151', '/com/canonical/menu/3800089'),
 (62916305L, u':1.159', '/com/canonical/menu/3C006D1'),
 (54526127L, u':1.129', '/com/canonical/menu/34000AF'),
 (58725701L, u':1.151', '/com/canonical/menu/3801545'),
 (25167093L, u':1.22', '/com/canonical/menu/18004F5'),
 (58726237L, u':1.151', '/com/canonical/menu/380175D'),
 (60825279L, u':1.155', '/com/canonical/menu/3A01EBF'),
 (58721371L, u':1.151', '/com/canonical/menu/380045B'),
 (25165828L, u':1.22', '/com/canonical/menu/1800004')]

Это код, который я написал в PyQt, ожидающий нечто подобное:

from PyQt4.QtGui import QApplication
from PyQt4.QtDBus import QDBus
from PyQt4.QtDBus import QDBusConnection
from PyQt4.QtDBus import QDBusInterface

desktop = QApplication([])
session_bus_connection = QDBusConnection.sessionBus()
service_name = 'com.canonical.AppMenu.Registrar'
service_path = 'com/canonical/AppMenu/Registrar'
interface = 'com.canonical.AppMenu.Registrar'
menu = QDBusInterface(service_name, service_path, interface, QDBusConnection.sessionBus())
reply = menu.call('GetMenus')
print reply.arguments()
desktop.exec_()

на самом деле я получаю из кода выше:

christopher@xx-pc:~/Documents/Code$ python desktop_dbus.py
process 2613: arguments to dbus_message_new_method_call() were incorrect, assertion "_dbus_check_is_valid_path (path)" failed in file ../../dbus/dbus-message.c line 1204.
This is normally a bug in some application using the D-Bus library.
process 2613: arguments to dbus_message_set_auto_start() were incorrect, assertion "message != NULL" failed in file ../../dbus/dbus-message.c line 2885.
This is normally a bug in some application using the D-Bus library.
process 2613: arguments to dbus_message_iter_init_append() were incorrect, assertion "message != NULL" failed in file ../../dbus/dbus-message.c line 2284.
This is normally a bug in some application using the D-Bus library.
QDBusConnection: error: could not send message to service "com.canonical.AppMenu.Registrar" path "com/canonical/AppMenu/Registrar" interface "org.freedesktop.DBus.Introspectable" member "Introspect": 
[]

Может кто-нибудь сказать мне, почему сообщение не отправляется?

4
задан 25 July 2017 в 04:56

1 ответ

Ответ на основе этого комментария от Джеджа :

process 2613: arguments to dbus_message_new_method_call() were incorrect
 assertion "_dbus_check_is_valid_path (path)" failed in file ../../dbus/dbus-message.c line 1204.
This is normally a bug in some application using the D-Bus library.

Это указывает на проблему. Все пути DBus начинаются с /, поэтому вы должны изменить

service_path = 'com/canonical/AppMenu/Registrar'

на

service_path = '/com/canonical/AppMenu/Registrar'
0
ответ дан 25 July 2017 в 04:56

Другие вопросы по тегам:

Похожие вопросы: