【发布时间】:2013-08-22 04:03:45
【问题描述】:
我编写了一个 wxpython 应用程序,它使用了几个不同的线程,所有这些线程都需要写入日志窗口(textctrl 框)。因此,我遵循了本教程
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 会很容易。
我错了!!
所以在阅读了一些 cmets 之后,似乎有两个版本的 pubSub API,所以使用这个
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,但仍然没有成功。
于是我又看了下面的文章
How to get pubsub to work with pyinstaller?
http://www.pyinstaller.org/ticket/312
这两者都非常有用,我尝试了更改挂钩文件和不同规范文件的所有不同变体,但仍然无法正常工作。
这些帖子几乎是 2 年前的事了,我原以为添加 pubsub 就可以解决了。
谁能解释一下我需要什么钩子、规范文件中包含什么以及我需要做的其他元素才能使其工作的过程?
如果没有解决方案,我还能如何与小部件进行线程安全通信?
【问题讨论】:
标签: wxpython pyinstaller