ログ ウィンドウ (textctrl ボックス) に書き込む必要があるいくつかの異なるスレッドを使用する wxpython アプリケーションを作成しました。このため、このチュートリアルに従いました
http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/
wx.CallAfter と PubSub を使用しました。
これは私の元のコードでした
from wx.lib.pubsub import Publisher
Publisher().subscribe(self.messenger, "update")
wx.CallAfter(Publisher().sendMessage, "update", "Thread finished!")
def messenger(self, msg):
self.logtxtctrl.WriteText(msg.data)
このコードは見事に機能し、pyinstaller を使用してコードの exe を作成するのは簡単だと思いました。
私はなんて間違っていたのでしょう。
いくつかのコメントを読んだ後、pubSub API には 2 つのバージョンがあるようです。
http://wiki.wxpython.org/WxLibPubSub
コードを次のように調整しました
from wx.lib.pubsub import setuparg1
from wx.lib.pubsub import pub
pub.subscribe(self.messenger, "update")
wx.CallAfter(pub.sendMessage, "update", data="Program success")
def messenger(self, data):
self.logtxtctrl.WriteText(data)
このコードは機能するようになりましたが、再び pyinstaller を使用しようとしましたが、まだ運がありません。
だから私は次の記事を読みます
pubsub を pyinstaller で動作させるには?
http://www.pyinstaller.org/ticket/312
どちらも非常に便利で、フック ファイルとさまざまな仕様ファイルを変更するさまざまなバリエーションをすべて試しましたが、まだ動作しません。
これらの投稿はほぼ 2 年前のもので、pubsub を追加すれば解決すると思っていました。
どのフックが必要なのか、スペックファイルに何が必要なのか、それを機能させるために必要なその他の要素のプロセスを誰か説明してもらえますか?
解決策がない場合、他にどのようにウィジェットとスレッドセーフな通信を行うことができますか?