1

私は wxPython で GUI を構築しており、モデルから見えないようにすることで MVC に忠実であり続けようとしています。pubsub ライブラリを使用して、コントローラがサブスクライブするモデルからメッセージを送信し、必要に応じてビューを更新しています。

ただし、複雑な問題があります。私のモデルには同じオブジェクトのインスタンスのリストがあり、各オブジェクトは独自のヘルスとステータスのステータス更新メッセージを送信する必要があります。以下に示すように、各オブジェクトにはビュー内に独自のパネルがあります。

食事の哲学者のステータス表.

私のコントローラーにはオブジェクトのリストがあります:

kierkegaard   = PhilosophersWithMetaData("Soren Kierkegaard", "thumbnails/kierkegaard.jpg", forks[0], forks[4])
lewis         = PhilosophersWithMetaData("C.S. Lewis", "thumbnails/lewis.jpg", forks[1], forks[0])
dostoevsky    = PhilosophersWithMetaData("Fyodor Dostoevsky", "thumbnails/dostoevsky.jpg", forks[2], forks[1])
descartes     = PhilosophersWithMetaData("Rene Descartes", "thumbnails/descartes.jpg", forks[3], forks[2])
kant          = PhilosophersWithMetaData("Immanuel Kant", "thumbnails/kant.jpg", forks[4], forks[3])

philosopher_list = [kierkegaard, lewis, dostoevsky, descartes, kant]

モデル内の各 Philosopher には次のものがあります。

def changeState(self, new_state):
    self.state = new_state
    pub.sendMessage("STATE_CHANGED", self.state)

私の質問は、正しいパネルを更新できるように、どのオブジェクトがメッセージを送信したかを知るにはどうすればよいですか? 更新をビューに渡すことができるように、参照するインデックスまたはオブジェクトが必要です。これを行う「MVC承認済み」の方法はありますか?

4

1 に答える 1

2

に追加の引数を置くことができます

Publisher.sendMessage("someMessage",["some_argument",1])

この場合、あなたはするでしょう

Publisher.sendMessage("someMessage",self)
...
Publisher.subscribe(self.MyPubsubListenerForSomeMessage,"someMessage")
... 
def MyPubsubListenterForSomeMessage(self,e):
    print e.data
于 2012-09-28T18:22:08.790 に答える