栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用带有PyQt4的QDBusAbstractAdaptor在DBus上公开方法和属性?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用带有PyQt4的QDBusAbstractAdaptor在DBus上公开方法和属性?

您的程序有几个问题。我建议您查看来自最新PyQt来源的

remotecontrolledcar
pingpong
示例,它们非常有用。要注意的要点是:

  • 您应将一个
    MyServer
    实例(不是
    ServerAdaptor
    )传递给
    registerObject()
  • pyqtSlot()
    装饰器添加到您希望通过D-Bus公开的功能中
  • 呼叫
    Q_CLASSINFO()
    在适配器类的顶部,而不是在其
    __init__()
    功能
  • 还要使用以下命令设置“ D-Bus接口”
    Q_CLASSINFO()
  • 您的自省XML包含一个错字(“目录”而不是“方向”)

这是一个适用于我的简化示例(Python 3.2.3 / Qt 4.8.2 / PyQt 4.9.4):

from PyQt4 import QtDBusfrom PyQt4.QtCore import (QCoreApplication, QObject, Q_CLASSINFO, pyqtSlot,    pyqtProperty)from PyQt4.QtDBus import QDBusConnection, QDBusAbstractAdaptorclass MyServer(QObject):    def __init__(self):        QObject.__init__(self)        self.__dbusAdaptor = ServerAdaptor(self)        self.__name = 'myname'    def echo(self, value):        return'Received: {0}'.format(value)    @property    def name(self):        return self.__name    @name.setter    def name(self, value):        self.__name = valueclass ServerAdaptor(QDBusAbstractAdaptor):    """ This provides the DBus adaptor to the outside world"""    Q_CLASSINFO("D-Bus Interface", "com.home.dbus")    Q_CLASSINFO("D-Bus Introspection",    '  <interface name="com.home.dbus">n'    '    <property name="name" type="s" access="readwrite"/>n'    '    <method name="echo">n'    '      <arg direction="in" type="s" name="phrase"/>n'    '      <arg direction="out" type="s" name="echoed"/>n'    '    </method>n'    '  </interface>n')    def __init__(self, parent):        super().__init__(parent)    @pyqtSlot(str, result=str)    def echo(self, phrase):        return self.parent().echo(phrase)    @pyqtProperty(str)    def name(self):        return self.parent().name    @name.setter    def name(self, value):        self.parent().name = valuedef start():    app = QCoreApplication([])    bus = QDBusConnection.sessionBus()    server = MyServer()    bus.registerObject('/mydbus', server)    bus.registerService('com.home.dbus')    app.exec()if __name__ == '__main__':    start()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625944.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号