如何使wx.TextCtrl内容默认不被选中?

时间:2014-07-11 08:04:04

标签: python wxpython wxtextctrl

这是我的问题:

enter image description here

self.textCtrl1 = wx.TextCtrl(id=wx.ID_ANY, name='textCtrl1',
              parent=self, pos=wx.Point(0, 100), size=wx.Size(400, 100),
              style=wx.VSCROLL | wx.TE_MULTILINE, value='')
self.textCtrl1.SetValue("I don't want this line to be selected by default!\n")

正如您所看到的,每次对话框启动时,默认情况下始终会选择wx.TextCtrl中的内容,即使我SetInsertionPoint到最后一个字符也是如此。这真的很烦人,因为您输入的任何内容都会默认删除以前选择的内容,而我无法找到将光标设置为初始文本末尾的方法。那么你如何解决这个问题?

P.S。:我在win 7 64bit上使用wxPython 2.8.12.1,python 2.7.3

3 个答案:

答案 0 :(得分:2)

您的textCtrl文字会自动被选中,这很奇怪。在正常情况下,光标只会指向框的开头。

尝试以下方法之一:

self.textCtrl.SetValue("I don't want this line to be selected by default!\n")
self.textCtrl.SetInsertionPoint(self.textCtrl.GetLastPosition())

或者不是使用SetValue,请使用:

print >> self.textCtrl, "I don't want this line to be selected by default!"

答案 1 :(得分:2)

我有同样的问题。我发现在运行frame.Show()方法之后我必须设置textctrl的值。

答案 2 :(得分:1)

我已经阅读了wxWidgets论坛上的一些帖子,似乎在wxWidgets 2.8x的Windows上,默认情况下,多行文本是自动选择的,并且没有好的方法可以取消选择它。据说这是默认行为,因为它反映了Windows API的默认行为,但我不确定为什么他们会有一个名为SetSelection()的函数实际上没有设置选择。 wxWidgets海报曾建议使用wxRichTextCtrl,因为它不会自动选择。

他们还在讨论在未来的wxWidgets实现中默认取消选择多行文本控件,他们还提到在OsX下,默认行为是:单行 - 自动选择全部,多个line - 选择none。

因此,您所看到的内容与其他人看到的内容之间的差异可能是由于不同的操作系统,甚至是不同版本的wxWidgets。我只想说,我也有这个问题,并没有找到最好的工作。

但是,如果您不介意使用多行文本控制处理选项卡而不是用于GUI导航的选项卡,请使用属性wxWANTS_CHARS,选择问题将消失。