Я использую wx.TextCtrl для вывода текста из сетевого демона. Поскольку выходные данные довольно многословны, размер текста в TextCtrl может стать огромным (кстати, есть ли какие-либо ограничения на размер содержимого TextCtrl?) Я хотел бы удалить верхние N строк из TextCtrl, когда TextCtrl.GetNumberOfLines () превышает предопределенный порог. Каков наилучший способ сделать это?
Ссылка SetMaxLength говорит о том, что ограничение зависит от базового собственного текстового элемента управления, но должно быть не менее 32 КБ.
Об удалении верхних N строк вы можете попытаться вызвать GetLineLength для 0..N-1, вычислить сумму S, а затем вызвать Удалить (0, S)
Вы должны иметь возможность использовать wx.TextCtrl.PositionToXY() и wx.TextCtrl.XYToPosition() для преобразования позиции (измеряется в символах от начала) в и из пары (column, line_num).
wx.TextCtrl.PositionToXY()
wx.TextCtrl.XYToPosition()
(column, line_num)
Таким образом, вы можете использовать i = wx.TextCtrl.XYToPosition(0, n), чтобы получить позицию i определенной линии n (или n + 1 , в зависимости от того, как вы их считаете 0- или 1), затем вызовите wx.TextCtrl.Remove(0, i), чтобы удалить первые n строк.
i = wx.TextCtrl.XYToPosition(0, n)
i
wx.TextCtrl.Remove(0, i)
Remove () должен помочь.
TextCtrl без флага wx.TE_RICH не может иметь более 64 КБ в Windows.
Как насчет метода Remove wx.TextCtrl?
Всякий раз, когда вы собираетесь добавить новый текст, вы можете проверить, является ли текущий текст слишком длинным, и удалить его с самого начала.