0

我将标准错误输出到 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,因为我正在使用线程。

4

1 回答 1

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)
于 2014-06-29T14:59:18.983 回答