【问题标题】:Using DBus in python program在python程序中使用DBus
【发布时间】:2012-09-12 11:49:08
【问题描述】:

问题1:

我尝试编写一个脚本来与 Pidgins DBus 对话。我的脚本现在是这样的:

#!/usr/bin/env python

import dbus, gobject
from dbus.mainloop.glib import DBusGMainLoop

class DBus_Answer():
    def __init__(self, text):
        dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
        bus = dbus.SessionBus()
        self.answer = text

        bus.add_signal_receiver(self.my_func,
                                dbus_interface="im.pidgin.purple.PurpleInterface",
                                signal_name="ReceivedImMsg")
        loop = gobject.MainLoop()
        loop.run()

    def my_func(self, account, sender, message, conversation, flags):
        print sender, "said:", message
        bus = dbus.SessionBus()
        obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
        purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
        purple.PurpleConvImSend(purple.PurpleConvIm(conversation), self.answer)

run = DBus_Answer("My message!")

这很好用。但我的原始程序使用PyQt4,我想使用QDBus 来实现这一点。我进行了很多搜索,但没有找到有关此主题的任何有用文档。

问题2: 我在某处读到 python 3 不支持 DBus,是真的吗?它会用什么来代替那个?

谢谢大家。

【问题讨论】:

    标签: python python-2.7 pyqt pyqt4


    【解决方案1】:

    我进行了更多搜索并找到了一些解决方案。现在我的代码是这样的并且工作得很好;-):

    #!/usr/bin/env python
    
    import sys
    import dbus
    from PyQt4.QtGui import QApplication
    from dbus.mainloop.qt import DBusQtMainLoop
    
    class DBus_Answer():
        def __init__(self, text):
            self.answer = text
            bus_loop = DBusQtMainLoop(set_as_default=True)
            self.bus = dbus.SessionBus()
            self.bus.add_signal_receiver(self.my_func,
                                         dbus_interface="im.pidgin.purple.PurpleInterface",
                                         signal_name="ReceivedImMsg")
    
        def my_func(self, account, sender, message, conversation, flags):
            obj = self.bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
            purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
            purple.PurpleConvImSend(purple.PurpleConvIm(conversation), self.answer)
    
    app = QApplication(sys.argv)
    run = DBus_Answer("Slam")
    app.exec_()
    

    【讨论】:

      猜你喜欢
      • 2012-10-14
      • 2011-09-16
      • 2020-03-08
      • 2020-11-10
      • 2021-02-23
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多