Question

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?

Was it helpful?

Solution

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)

OTHER TIPS

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.

Remove() should do the trick.

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

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top