2

我正在用 Python + wxPython 编写电子书阅读器,我想知道在给定的 RichTextCtrl 中可以显示多少行文本,当前格式不滚动。

我想过使用并将控件的高度除以RichTextCtrl.GetFont().GetPixelSize(),但似乎像素大小参数wx.Font仅在 Windows 和 GTK 上指定。此外,这不会涵盖行/段落之间的任何额外垂直间距。

我当然可以以磅为单位获取字体大小,尝试以 ppi 为单位获取显示器的分辨率,然后这样做,但是 1)行距问题仍然存在,2)对于类似的东西来说,抽象级别太低了这。

有没有一种理智的方法可以做到这一点?

编辑:目标是将电子书分成几页,因此滚动单元是一整页,而不是一行。

4

2 回答 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
于 2010-08-26T11:03:53.540 回答
0

您是否尝试调用 GetNumberOfLines() 方法?根据 Robin Dunn 的说法,这应该可行,尽管它没有考虑换行。

于 2010-08-19T21:22:05.477 回答