2016-05-04 29 views
0

とのインターフェイス上PropertiesChanged`リスナー、シグナルハンドラがPropertiesChanged信号にかかるデフォルトの引数は次のとおりです。リスナーでPythonのDBUS - 次のように `Pythonの3 DBUSモジュールで追加の引数

def handler(interface, changed_properties, invalidated_properties): something...

以下のような設定に何か:私はこのような構造とシグナルハンドラを持つことができるように、私は、最後に余分な引数を追加することができますどのように

dbus.Interface.connect_to_signal("PropertiesChanged", handler)

def handler(interface, changed_properties, invalidated_properties, extra_argument): something...

答えて

0

PropertiesChangedはorg.freedesktop.DBus.Propertiesインターフェイスの一部であり、あなたはその署名を変更してはなりません。他のプログラムでは、DBus仕様で指定されているとおりに実装されていると想定しています。これは、複数のDBusバインディングによって使用され、変更されたときにプロキシ・オブジェクトのプロパティーを自動的に更新します。

独自のカスタム引数を使用して独自の信号を作成することができます。

class Example(object): 
    @dbus.service.signal(dbus_interface='com.example.Sample', 
         signature='us') 
    def NumberOfBottlesChanged(self, number, contents): 
     pass 

pydbus付::(非推奨)のpython-dbusので

from pydbus.generic import signal 

class Example(object): 
    """ 
     <node> 
     <interface name='com.example.Sample'> 
      <signal name='NumberOfBottlesChanged'> 
      <arg type='u' name='number'/> 
      <arg type='s' name='contents'/> 
      </signal> 
     </interface> 
     </node> 
    """ 
    NumberOfBottlesChanged = signal() 
+0

私はfreedesktopを使用していますPython 3のdbusモジュールについては、上記の最初の例と同じだと思います。私の目標は最終的にはシグナルレシーバーを作成することですが、クラスの「self」オブジェクトを渡すことができます(クラスのメンバーを変更できるように) - このプログラムのために変更する必要があります。一度使用。 – Joe

+0

ハンドラとしてラムダを使うだけで、そのレキシカルスコープからselfを使うことはできませんか? – LEW21

+0

それは解決策かもしれない、私はそれを試してみる:) – Joe

関連する問題