wx.TextCtrl getlinelth.不工作后打电话



我正在将标准输出到wx。TextCtrl,在10行之后,我想删除第一行,所以在我的wx中只有最多10行。TextCtrl窗口。我有一个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

当run s = None时,so失败。我用wx。

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)

相关内容

  • 没有找到相关文章

最新更新