我试图在单行wx.textctrl中下划线一些特定的单词。我是通过使用gettextent计算控件中单词的位置并使用wx.ClintDC绘制线条来实现的。
我的问题开始于TextCtrl中的文本比控件的大小长,例如,如果用户输入~100个字符,如果控件不够长,他只能看到20个最后字符。
我的问题是:我怎么能得到一个字符串,这是实际显示在单行控制?或者我如何计算文本的宽度,这是不显示(在左侧)的像素?
单行文本控件没有滚动条。GetInsertionPoint返回插入符号在文本中的位置,但不可能将其转换为与控件左边框的实际距离(以像素为单位)。
我不想使用TE_RICH或TE_RICH2样式而不是StyledTextCtrl类,因为它们不支持从右到左的文本
我认为你必须使用一个TE_RICH样式来下划线文本在wx.TextCtrl。你试过StyledText控件吗?他们使用scintilla,这可能会给你更多的控制。
还有ExpandoTextCtrl,它将随着用户类型展开。
如果您设置了区域设置,您应该自动获得从右到左的行为:http://wiki.wxpython.org/Internationalization#Switching_between_Left_to_Right_and_Right_to_Left_Languages
我真的没有看到一个方法来抓取字符串可见的部分。你必须使用字体的宽度来计算它,也可能使用文本控件的选择方法。您可能也想交叉发送到wxPython邮件列表。他们可能也有自己的想法。
好的,我找到的解决方案是:
from win32api import SendMessage
result = SendMessage(self.GetHandle(), EM_POSFROMCHAR, 0, 0)
result是控件中第一个字符的客户端坐标。如果指定的字符未显示在编辑控件的客户端区域中,则该值为负值。