我正在将stderr输出到wx.TextCtrl,在10行之后我想删除第一行,所以在我的wx.TextCtrl窗口中最多只有10行。 我有一个使用多个线程和类的python脚本。我不能为我的生活获得下面的代码来工作,有人可以给我一些提示吗?
a = 1
while True:
line = self.process1.stderr.readline().decode('utf-8')
wx.CallAfter(self.frame.running_log1.AppendText, line)
if a >= 10:
s = wx.CallAfter(self.frame.running_log1.GetLineLength, 0) +1
wx.CallAfter(self.frame.running_log1.Remove, 0, s)
print s
a +=1
当运行s = None时,失败。当我使用线程时,我正在使用wx.CallAfter。
答案 0 :(得分:1)
wx.CallAfter
返回None
的原因是因为此时无法返回任何内容。它无法返回长度,因为它所做的一切都是一个注释,在某个时刻它很快就需要调用该函数。它实际上没有调用函数,并且不会等到函数被调用。
在这种情况下,我会写一个方法,它会附加一行并根据需要删除第一行。这可能类似于:
def appendAndTrim(self, line):
self.frame.running_log1.AppendText(line)
self.line_count += 1
if self.line_count > 10:
first_line_length = self.frame.running_log1.GetLineLength(0) + 1
self.frame.running_log1.Remove(0, first_line_length)
我会将此单一方法传递给wx.CallAfter
,而不是对wx.CallAfter
进行三次单独调用:
self.line_count = 0
while True:
line = self.process1.stderr.readline().decode('utf-8')
wx.CallAfter(self.appendAndTrim, line)