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 的练习)。