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

Wxpython 如何获取wx.TextCtrl中实际显示的字符?,wxpython,wxtextctrl,Wxpython,Wxtextctrl,我试图在单行wx.textctrl中的一些特定单词下面划线。我通过使用GetTextExtent计算单词在控件中的位置,并使用wx.ClintDC绘制线条来实现 当TextCtrl中的文本比控件的大小长时,我的问题就开始了。例如,如果用户输入约100个字符,那么如果控件不够长,他只能看到最后20个字符 我的问题是:如何获得在单行控件中实际显示的字符串?或者,如何计算左侧未显示的文本的宽度(以像素为单位) 单行文本控件没有滚动条。GetInsertionPoint返回插入符号在文本中的位置,但无法

我试图在单行wx.textctrl中的一些特定单词下面划线。我通过使用GetTextExtent计算单词在控件中的位置,并使用wx.ClintDC绘制线条来实现

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

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

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


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

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

还有ExpandoTextCtrl,它将随着用户的输入而扩展

此外,如果设置了区域设置,则应自动获得从右向左的行为:


我真的看不到一个方法,只抓取字符串中可见的部分。您必须使用字体的宽度计算它,可能还需要使用文本控件的选择方法。您可能也希望交叉投递到wxPython邮件列表。他们可能也会有想法。

我认为你必须使用一种富TE_风格在wx.TextCtrl中的文本下划线。您是否尝试过StyledText控件?他们使用闪烁,这可能会给你更多的控制

还有ExpandoTextCtrl,它将随着用户的输入而扩展

此外,如果设置了区域设置,则应自动获得从右向左的行为:


我真的看不到一个方法,只抓取字符串中可见的部分。您必须使用字体的宽度计算它,可能还需要使用文本控件的选择方法。您可能也希望交叉投递到wxPython邮件列表。他们可能也会有想法。

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

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

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

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

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

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

谢谢,但正如我所写的,TE_RICH、TE_RICH2和StyledTextCtrl类不支持RTL text AFAIK。Ans我不想更改应用程序的布局,只想让他们在某些控件中输入RTL文本。您是否尝试使用富控件或StyledTextCtrl设置LayoutDirection以查看其是否有效?你不必改变你的计划。只需写一个快速的一次性检查。斯金特拉目前在LTR文本和指示器的RTL文本显示方面存在问题,特别是在RTL和LTR结合的情况下。对不起。我不知道。我问过wxPython的创建者Robin Dunn该怎么做,他认为SetLayoutDirection适合你,这就是我提到它的原因。谢谢,但正如我所写的,Teu RICH、Teu RICH2和StyledTextCtrl类不支持RTL文本AFAIK。Ans我不想更改应用程序的布局,只想让他们在某些控件中输入RTL文本。您是否尝试使用富控件或StyledTextCtrl设置LayoutDirection以查看其是否有效?你不必改变你的计划。只需写一个快速的一次性检查。斯金特拉目前在LTR文本和指示器的RTL文本显示方面存在问题,特别是在RTL和LTR结合的情况下。对不起。我不知道。我问过wxPython的创建者Robin Dunn该怎么做,他认为SetLayoutDirection适合你,这就是我提到它的原因。