Удаление строк из wx.TextCtrl

Я использую wx.TextCtrl для вывода текста из сетевого демона.
Поскольку вывод довольно подробный, размер текста в TextCtrl может стать огромным (кстати, есть ли какие-либо ограничения на размер содержимого TextCtrl?)
Я хотел бы удалить верхние N строк из TextCtrl, когда TextCtrl.GetNumberOfLines() превышает предопределенный порог. Каков наилучший способ добиться этого?


person Kurt Pattyn    schedule 16.01.2009    source источник


Ответы (4)


В справке по SetMaxLength говорится, что ограничение зависит от базового встроенного текстового элемента управления, но должен быть не менее 32 КБ.

Что касается удаления первых N строк, вы можете попробовать вызвать GetLineLength для 0. .N-1, вычислите сумму S и затем вызовите Remove(0, С)

person schnaader    schedule 16.01.2009
comment
Спасибо. Вот что я придумал: def deleteLines(self, numLines): size = 0 for i in range(numLines): self.outputdevice.Remove(0, self.outputdevice.GetLineLength(0)) - person Kurt Pattyn; 16.01.2009
comment
Я бы сравнил производительность вызова GetLineLength() N раз и 1 раза Remove() с вызовом N раз Remove и N раз GetLineLength(). Просто для справки. - person Abgan; 17.01.2009
comment
Согласно @Abgan: с wxPython в Windows 7 намного быстрее вызвать Remove только один раз. - person Generic Ratzlaugh; 14.02.2018

Как насчет метода Remove из wx.TextCtrl?

Всякий раз, когда вы собираетесь добавить новый текст, вы можете проверить, не кажется ли текущий текст слишком длинным, и удалить его с самого начала.

person Eli Bendersky    schedule 16.01.2009

Remove() должен помочь.

TextCtrl без флага wx.TE_RICH не может иметь более 64 КБ в Windows.

person Abgan    schedule 16.01.2009

Вы должны иметь возможность использовать 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), чтобы удалить первый < em>n строк.

person Craig McQueen    schedule 08.08.2016