Выяснение того, сколько строк можно отобразить в wx.richtext.RichTextCtrl без прокрутки

Я пишу для чтения электронных книг на Python + wxPython, и я хотел бы узнать, сколько строк текста может отображаться в данном RichTextCtrl с текущим форматированием без прокрутки.

Я думал об использовании и делении высоты элемента управления на RichTextCtrl.GetFont().GetPixelSize(), но кажется, что параметр размера пикселя wx.Font указывается только на Windows и GTK. Кроме того, это не будет охватывать дополнительное вертикальное расстояние между строками / абзацами.

Конечно, я мог бы получить размер шрифта в точках, попытаться получить разрешение экрана в ppi и сделать это таким образом, но 1) проблема с межстрочным интервалом все еще остается и 2) это слишком низкий уровень абстракции для чего-то вроде этот.

Есть ли нормальный способ сделать это?

РЕДАКТИРОВАТЬ: цель состоит в том, чтобы разделить книгу на страницы, чтобы блок прокрутки представлял собой целую страницу, а не строку.

2 ответа

Решение

Исходный код метода PageDown предполагает, что нет вменяемого способа сделать это...

Вот мое безумное предложение (которое разбивает содержимое виджета, каретку, отображаемую позицию...), которое прокручивает одну страницу и измеряет, как долго эта прокрутка...

def GetLineHeight(rtc):
    tallString = "\n".join([str(i) for i in xrange(200)])
    rtc.SetValue(tallString)
    rtc.SetInsertionPoint(0)
    rtc.PageDown()
    pos = rtc.GetInsertionPoint()
    end = tallString.find("\n",pos)
    lineHeight=int(tallString[pos:end])
    return lineHeight

Вы пытались вызвать метод GetNumberOfLines()? По словам Робина Данна, это должно сработать, хотя и не учитывает переносимые строки.

Другие вопросы по тегам