【发布时间】:2014-03-11 13:43:53
【问题描述】:
我目前有一个 wxpython gui 应用程序,它读取一个不断增长的文本文件并将其打印到 wx.TextCtrl 窗口。我需要同时运行其中的两个,但显然遇到了称为递归错误的 wxYield。 是否有一个简单的替代 wx.Yield 的方法可以让我运行多个?
self.running_log = wx.TextCtrl(self, -1, pos=(5, 5), size=(875,605),
style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
while True:
wx.Yield()
fileSize = os.path.getsize(logPath)
if fileSize > lastSize:
lines = infile.readlines()
newLines = 0
for line in lines[lastLineIndex:]:
newLines += 1
print line.rstrip()
self.running_log.AppendText(line)
【问题讨论】:
-
在不了解有关代码功能以及所有位如何交互的更多详细信息的情况下,我只能建议
threading可能是要走的路。设置一个线程从文件中读取并在它执行时生成一个事件。然后让该事件触发另一个更新TextCtrl的线程。 -
我不知道你的代码在做什么,但递归意味着你的
wx.Yield()允许运行某些函数,这也是长时间运行的,因此调用wx.Yield()。您应该确保当您调用 yield 时,它所能做的只是 GUI 更新,并且用户不会导致其他长时间运行的事情发生。 -
稍微修改了这个问题,以便您可以看到它处于一个永无止境的 while True 循环中。这是我需要穿线的一小部分,或类似的东西。