wxPython styledtextctrl:如何在启用自动换行的情况下获取可见行数?
wxPython styledtextctrl: How to get number of visible lines with word wrapping enabled?
我正在尝试确定在启用了自动换行的 wxPython 样式文本控件中屏幕上显示的行数。
我在这里看到了几个可见行的答案:
wxPython - StyledTextCtrl get currently visible lines
Get visible lines in Scintilla.NET component
第二个如果用于 C#,但由于基础仍然闪烁,我认为它是相关的。
这些解决方案的问题在于,当它们给出行时,它们是在假设未启用自动换行的情况下这样做的。如果它已启用,并且某些行被换行,则以下闪烁函数 returns 未启用换行时的值:
LinesOnScreen()
所以我的问题是,如果启用了自动换行,是否有任何方法可以获取屏幕上的行数?
我假设您想要的是 document 行的数量,而不是 display 行的数量。所以如果启用换行,如果有换行,前者将小于后者。
正如您已经发现的那样,LinesOnScreen()
将给出可见的 display 行数。但是目前没有内置工具可以获取可见的 document 行数,因此需要计算。
完整的解决方案可能非常复杂,尤其是当您需要考虑折线和注释等问题时。但是一个非常基本的解决方案是这样的:
index = editor.GetFirstVisibleLine()
lines = editor.LinesOnScreen() + index
count = 0
while index < lines:
index += editor.WrapCount(index)
count += 1
但请注意,这不会尝试处理屏幕顶部和底部的部分线条(留作 reader 的练习)。
我正在尝试确定在启用了自动换行的 wxPython 样式文本控件中屏幕上显示的行数。
我在这里看到了几个可见行的答案:
wxPython - StyledTextCtrl get currently visible lines
Get visible lines in Scintilla.NET component
第二个如果用于 C#,但由于基础仍然闪烁,我认为它是相关的。
这些解决方案的问题在于,当它们给出行时,它们是在假设未启用自动换行的情况下这样做的。如果它已启用,并且某些行被换行,则以下闪烁函数 returns 未启用换行时的值:
LinesOnScreen()
所以我的问题是,如果启用了自动换行,是否有任何方法可以获取屏幕上的行数?
我假设您想要的是 document 行的数量,而不是 display 行的数量。所以如果启用换行,如果有换行,前者将小于后者。
正如您已经发现的那样,LinesOnScreen()
将给出可见的 display 行数。但是目前没有内置工具可以获取可见的 document 行数,因此需要计算。
完整的解决方案可能非常复杂,尤其是当您需要考虑折线和注释等问题时。但是一个非常基本的解决方案是这样的:
index = editor.GetFirstVisibleLine()
lines = editor.LinesOnScreen() + index
count = 0
while index < lines:
index += editor.WrapCount(index)
count += 1
但请注意,这不会尝试处理屏幕顶部和底部的部分线条(留作 reader 的练习)。