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

1 投票
3 回答
2069 浏览
提问于 2025-04-18 12:54

这是我的问题:

在这里输入图片描述

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 设置到最后一个字符。这真的很烦人,因为你输入的任何内容都会默认覆盖之前选中的内容,而且我找不到方法把光标放到初始文本的最后。所以,怎么解决这个问题呢?

附注:我使用的是 Windows 7 64位,wxPython 2.8.12.1,Python 2.7.3

3 个回答

1

我在wxWidgets论坛上看到了一些帖子,发现wxWidgets 2.8x在Windows系统上,默认情况下多行文本是自动选中的,而且没有好的方法可以取消这个选中。大家说这是因为它和Windows API的默认行为一致,但我不明白为什么会有一个叫做SetSelection()的函数,却不真的去设置选中状态。论坛上的人建议可以使用wxRichTextCtrl,因为它不会自动选中。

他们还讨论了在未来的wxWidgets版本中,是否可以让多行文本控件默认不选中,并提到在OsX系统下,默认行为是:单行文本 - 自动全选,多行文本 - 不选中。

所以你看到的情况和别人看到的可能会有差异,这可能是因为不同的操作系统,甚至是不同版本的wxWidgets。可以说,我也遇到过这个问题,但还没找到最好的解决办法。

不过,如果你不介意多行文本控件处理制表符,而不是用制表符来进行界面导航,可以使用属性wxWANTS_CHARS,这样选中问题就会消失。

2

我也遇到过这个问题。我发现必须在运行了frame.Show()方法之后,才能设置文本框的值。

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!"

撰写回答