试图从wxpython GUI运行耗时的任务。基本的想法是从GUI开始长时间的任务(按下一个按钮),然后在对话框上的静态文本应该从中更新。wxpython GUI和多处理 - 如何从长时间运行的进程发回数据
首先我尝试了一些线程(http://wiki.wxpython.org/LongRunningTasks和许多其他资源),并且我想使用Publisher.class显示消息。它没有那么好,在一条或两条消息之后,GUI似乎被冻结了。
现在我想通过多处理实现这一点。我有这个方法我“GUI”类中:
def do_update(self, e):
self.txt_updatemsg.SetLabel("Don't stop this \n")
...
pub = Publisher() # i tried also calling directly from dbob object
# Publisher() is a singleton so this must be useless?
pub.subscribe(self.__update_txt_message, ('updatedlg', 'message'))
dbob = dbutils.DBUtils() # DBUtils is the class with 'long time' tasks
dbob.publisher = pub
p = Process(target=self.do_update_process, args=(dbob,))
p.start()
while p.is_alive:
wx.Yield
def do_update_process(self, dbob):
dbob.do_update()
__update_txt_message是一个简单的功能,什么套在对话框中的静态文本。
问题是:我怎样才能从这个过程发回一些短信(只是简单的文本,这就是我需要的) 谢谢你们!
后一些更多的工作,我最终在__update_txt_message方法(连接到Publisher类)的正确的信息。如果我把打印message.data它的作品,我可以在控制台中看到它。但它不会更新静态文本。所以现在的问题是:我如何强制更新?仍在挖... – wxpydon 2010-05-18 14:48:05
你为什么放弃使用线程?通常,最好的解决方案是为长时间运行的进程使用线程,并使用队列在主线程和长时间运行的进程线程之间进行通信。 – 2010-05-19 03:19:31
嗯,我不认为现在的问题是使用线程或进程。我能够在__update_txt_message中获取所需的消息,但从那里我无法更改静态标签,这看起来很奇怪。我可以将消息打印到控制台,我可以使用SetLabel,然后使用GetLabel查看,确定消息存在,但不显示对话框! – wxpydon 2010-05-19 05:54:56