2012-09-12 33 views
1

問題1使用的DBus:在Python程序

我試圖讓一個腳本洋涇濱的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的地方,這是真的嗎?它會用什麼來代替那個?

謝謝大家。

回答

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_()