Выяснение того, сколько строк можно отобразить в 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()? По словам Робина Данна, это должно сработать, хотя и не учитывает переносимые строки.