2

我试图在单行 wx.textctrl 中强调一些特定的单词。我通过使用 GetTextExtent 计算控件中单词的位置并使用 wx.ClintDC 绘制线条来做到这一点。

当 TextCtrl 中的文本比控件的大小长时,我的问题就开始了,例如,如果用户输入 ~100 个字符,如果控件不够长,他只能看到最后 20 个字符。

我的问题是:如何获得实际显示在单行控件中的字符串?或者如何计算未显示(左侧)的文本的宽度(以像素为单位)?

单行文本控件没有滚动条。GetInsertionPoint 返回文本中插入符号的位置,但不可能将其转换为距控件左边框的实际距离(以像素为单位)。

我不想使用 TE_RICH 或 TE_RICH2 样式而不是 StyledTextCtrl 类,因为它们不支持从右到左的文本。

4

2 回答 2

0

我认为您必须使用一种 TE_RICH 样式来为 wx.TextCtrl 中的文本添加下划线。您是否尝试过 StyledText 控件?他们使用可能给你更多控制的闪烁。

还有 ExpandoTextCtrl,它将随着用户键入而扩展。

此外,如果您设置语言环境,您应该自动获得从右到左的行为:http ://wiki.wxpython.org/Internationalization#Switching_between_Left_to_Right_and_Right_to_Left_Languages

我真的没有看到一种方法来抓取可见的字符串部分。您必须使用字体的宽度并可能使用文本控件的选择方法来计算它。您可能还想交叉发布到 wxPython 邮件列表。他们可能也会有想法。

于 2011-07-15T14:22:05.573 回答
0

好的,我找到的解决方案是:

from win32api import SendMessage
result = SendMessage(self.GetHandle(), EM_POSFROMCHAR, 0, 0)

结果是控件中第一个字符的客户端坐标。如果指定的字符未显示在编辑控件的客户区中,则该值为负数。

于 2011-07-19T10:39:59.213 回答