python控件触发事件_wxPython控件学习之TextCtrl(三)响应文本控件事件

例子:

frame.Bind(wx.EVT_TEXT, frame.OnText, text)

TextCtrl支持的事件类型:

EVT_TEXT:文本因用户的输入或在程序中使用SetValue()而被改变,都要产生该事件。

EVT_TEXT_ENTER:当用户在一个wx.TE_PROCESS_ENTER样式的文本控件中

按下了回车键时,产生该事件。

EVT_TEXT_URL:如果在Windows系统上,wx.TE_RICH或wx.TE_RICH2样式被设置了,

并且wx.TE_AUTO_URL样式也被设置了,那么当在文本控件内的URL上

发生了一个鼠标事件时,该事件被触发。

EVT_TEXT_MAXLEN:如果使用SetMaxLength()指定了该控件的最大长度,那么当

用户试图输入更长的字符串时,该事件被触发。

例如,这时给用户显示一个警告消息。

#注意:

当使用多行wx.TextCtrl的时候,要知道的一点是,该文本控件是以何种方

式存储字符串的。在内部,存储在该wx.TextCtrl中的多行字符是以\n作为行的

分隔符的。这与基本的操作系统无关,即使某些系统使用了不同的字符组合作

为一行的分隔符。当你使用GetValue()来获取该字符串时,原来的行分隔符被还

原,因此你不必考虑手工转换。这个的好处就是控件中的文本不依赖于任何特

定的操作系统。

缺点是,文本控件中的行的长度和行的索引与它们在文本控件外的可能是

不同的。例如,如果你在一个Windows系统上,系统所用的行分隔符是\r\n,

通过GetValue()所得知的字符串的长度将比通过GetLastPosition()所得知的字符串

的结尾长。通过在例7.3中增加下面两行:

print ”getValue”, len(multiText.GetValue())

print ”lastPos”, multiText.GetLastPosition()

我们在Unix系统上所得的结果应该是:

getValue 119

lastPos 119

我们在Windows系统上所得的结果应该是:

getValue 121

lastPos 119

这意味你不应该使用多行文本控件的位置索引来取得原字符串,位置索引

应该用作wx.TextCtrl的另外方法的参数。对于该控件中的文本的子串,应该使

用GetRange()或GetSelectedText()。也不要反向索引;不要使用原字符串的索引

来取得并放入文本控件中。下面是一个例子,它使用了不正确的方法在插入点

之后直接得到10个字符:

aLongString = ”””Any old

multi line string

will do here.

Just as long as

it is multiline”””

text = wx.TextCtrl(panel, -1, aLongString, style=wx.TE_MULTILINE)

x = text.GetInsertionPoint()

selection = aLongString[x : x + 10] #这将是不正确的

在Windows或Mac系统中要得到正确的结果,最后一行应换为:

selection = text.GetRange(x, x + 10)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值