python - 在python程序中使用DBus

标签 python python-2.7 pyqt pyqt4

问题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,是真的吗?它会用什么来代替它?

谢谢大家。

最佳答案

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

#!/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_()

关于python - 在python程序中使用DBus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12387521/

相关文章:

python - 将列表中的类对象添加到 QWidget

python - 光栅源形状与给定索引不一致 1

python - 多变量回归 statsmodels.api

python - 在 seaborn facetgrid 的各个方面设置轴限制

python - Apache Airflow 不调度任务

python - 类型错误 : 'in <string>' requires string as left operand, 不是 QString

python - Numpy 轮子的效率和 Numpy 安装的简单基准

python - 使用 python 2.7 时内存泄漏

python - 组合当时列表 3 的元素

python - PyQt:如何在小部件之间传输文本数据?