SSブログ

メモリーのリスナー [python]

列車が区間に進入してきたときには列車のIDを格納しているメモリー値が変わるのですが、それを検知して動作するリスナーの設定をご紹介します。

class mListener(java.beans.PropertyChangeListener):

     def propertyChange(self, event):

         if event.newValue != "": #(1)

               basho = memoriList.index(event.source.systemName)

               train = event.newValue

               genji = signals.getSignalHead(singoList[basho]).getAppearanceName()

               print "memory", train, basho, genji

               c.cont(train, basho, genji)

 

memoriList = ['IM:AUTO:0005', 'IM:AUTO:0004', 'IM:AUTO:0020', 'IM:AUTO:0019', 'IM:AUTO:0018', 'IM:AUTO:0014', 'IM:AUTO:0013', 'IM:AUTO:0012', 'IM:AUTO:0021', 'IM:AUTO:0022', 'IM:AUTO:0011', 'IM:AUTO:0010', 'IM:AUTO:0009', 'IM:AUTO:0023', 'IM:AUTO:0024', 'IM:AUTO:0001', 'IM:AUTO:0002', 'IM:AUTO:0003', 'IM:AUTO:0015', 'IM:AUTO:0016', 'IM:AUTO:0017', 'IM:AUTO:0008', 'IM:AUTO:0007', 'IM:AUTO:0006']

a = mListener()

for i in memoriList:

     memories.provideMemory(i).addPropertyChangeListener(a)

 

(1)で動作の全部をifの中に入れています。これはリスナーは値が消えたときにも動作するので、このときは無視するためのものです。
やっていることは簡単で、
変化した値(=train)、変化したリスナーの場所(=basho)、場所から見るべき信号機の現示を読み取り(=ganji)、それらを引数にして、昨日ご紹介した
スロットルを動かすためのクラスに定義されているcont関数をコールしているだけです。

定義のところに書かれていたselfの引数は、実際にコールするときは不要です。こういうのは流儀が分からなくて、なんでだろうと悩むことしばしばです。

動作確認のため、それらの値をprintしてます。

メモリーにアクセスするときはmemories.provideMemory(foo)なんですが、
信号機はsignals.getSignalHead(foo)なんですよね。いちいち調べないといかんので、分かるまでが大変。。。



タグ:DCC Python
nice!(1)  コメント(1)  トラックバック(0) 

nice! 1

コメント 1

pururu

トータン様、niceありがとうございます。
by pururu (2013-05-21 08:25) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。