3

I am using a wx.TextCtrl to output text from a network daemon.
As the output is quite verbose, the size of text in the TextCtrl can become huge (BTW is there any limitation on the size of the contents of a TextCtrl?)
I would like to delete the top N lines from the TextCtrl when TextCtrl.GetNumberOfLines() exceeds a predefined treshold. What is the best way to accomplish this?

Kurt Pattyn
  • 2,758
  • 2
  • 30
  • 42

4 Answers4

1

The SetMaxLength reference says that the limitation depends on the underlying native text control,but should be 32KB at least.

About deleting the top N lines, you could try to call GetLineLength for 0..N-1, calculate the sum S and then call Remove(0,S)

schnaader
  • 49,103
  • 10
  • 104
  • 136
  • Thanks. This is what I came up with: def deleteLines(self, numLines): size = 0 for i in range(numLines): self.outputdevice.Remove(0, self.outputdevice.GetLineLength(0)) – Kurt Pattyn Jan 16 '09 at 13:43
  • 2
    I'd compare the performance of calling N times GetLineLength() and 1 time Remove() vs calling N times Remove *and* N times GetLineLength(). Just for the reference. – Abgan Jan 16 '09 at 22:49
  • 1
    Per @Abgan: with wxPython on Windows 7 it is much, much faster to call Remove just once. – Generic Ratzlaugh Feb 13 '18 at 21:22
0

You should be able to use wx.TextCtrl.PositionToXY() and wx.TextCtrl.XYToPosition() to convert position (measured in characters from start) to and from a (column, line_num) pair.

So, you can use i = wx.TextCtrl.XYToPosition(0, n) to get the position i of a particular line n (or n+1, depending on how you count them 0- or 1-based), then call wx.TextCtrl.Remove(0, i) to remove the first n lines.

Craig McQueen
  • 41,871
  • 30
  • 130
  • 181
0

How about the Remove method of wx.TextCtrl?

Whenever you're about to add new text, you can check if the current text appears too long and remove some from the start.

Eli Bendersky
  • 263,248
  • 89
  • 350
  • 412
0

Remove() should do the trick.

TextCtrl without wx.TE_RICH flag can't have more than 64 KB on Windows.

Abgan
  • 3,696
  • 22
  • 31