如何获取实际显示在wx.TextCtrl中的字符?

时间:2011-07-15 13:06:34

标签: wxpython wxtextctrl

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

我认为你必须使用TE_RICH样式中的一个来为wx.TextCtrl中的文本加下划线。你试过StyledText控件吗?他们使用可能会给你更多控制的scintilla。

还有ExpandoTextCtrl,它将随着用户类型的扩展而扩展。

此外,如果您设置了区域设置,则应自动获得从右到左的行为:http://wiki.wxpython.org/Internationalization#Switching_between_Left_to_Right_and_Right_to_Left_Languages

我真的没有看到只抓取可见字符串部分的方法。您必须使用字体的宽度计算它,并且可能使用文本控件的Selection方法。您可能也希望交叉发布到wxPython邮件列表。他们可能也有想法。

答案 1 :(得分:0)

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

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

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