从 wx.TextCtrl 中删除行
我正在使用 wx.TextCtrl 从网络守护程序输出文本。
由于输出非常冗长,TextCtrl 中的文本大小可能会变得很大(顺便说一句,TextCtrl 的内容大小有限制吗?)
当 TextCtrl.GetNumberOfLines() 超过预定义的阈值时,我想从 TextCtrl 中删除前 N 行。 实现这一目标的最佳方法是什么?
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
SetMaxLength 参考表示限制取决于底层本机文本控件,但是至少应为 32KB。
关于删除前N行,您可以尝试调用GetLineLength为0。 .N-1,计算总和S,然后调用Remove(0, )
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)
wx.TextCtrl的Remove方法怎么样?
每当您要添加新文本时,您都可以检查当前文本是否显得太长,并从开头删除一些文本。
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() 应该可以解决问题。
在 Windows 上,不带 wx.TE_RICH 标志的 TextCtrl 不能超过 64 KB。
Remove() should do the trick.
TextCtrl without wx.TE_RICH flag can't have more than 64 KB on Windows.
您应该能够使用
wx.TextCtrl .PositionToXY()
和wx.TextCtrl.XYToPosition()
将位置(从开始处以字符为单位测量)与(column, line_num)
对相互转换。因此,您可以使用
i = wx.TextCtrl.XYToPosition(0, n)
来获取特定行 n 的位置i
(或者n+1,具体取决于您如何从 0 或 1 开始计数),然后调用wx.TextCtrl.Remove(0, i)
删除前n行。You should be able to use
wx.TextCtrl.PositionToXY()
andwx.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 positioni
of a particular line n (or n+1, depending on how you count them 0- or 1-based), then callwx.TextCtrl.Remove(0, i)
to remove the first n lines.