微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

wxPython:TextCtrl 防止替换 EVT_CHAR 上的选定文本

如何解决wxPython:TextCtrl 防止替换 EVT_CHAR 上的选定文本

我正在尝试制作只允许特定格式的 TextCtrl。我正在使用 EVT_CHAR 并且一切正常,直到用户开始选择文本。在某些情况下,我想保留原始文本和选择,但是当我的回调被调用时,选择似乎已经消失了。

import wx
class MyTextCtrl(wx.TextCtrl):

    def __init__(self,parent,ident,value,*args,**kwargs):
        super().__init__(parent,str(value),**kwargs)
        self.SetMaxLength(18)
        self.Bind(wx.EVT_CHAR,self.on_char)

    def on_char(self,e):
        print('current value:',self.GetValue(),',selected: ',self.GetStringSelection())
        e.Skip()

class MyDialog(wx.Dialog):
    def __init__(self,parent):
        wx.Dialog.__init__(
            self,-1,'Select Size',size=(200,135))

        MyTextCtrl(self,'01234')
        wx.Button(self,wx.ID_OK,'OK',pos=(100,75)).SetDefault()

if __name__ == "__main__":
    app = wx.App(0)
    dlg = MyDialog(None)
    dlg.ShowModal()
    dlg.Destroy()

当我选择“123”并按 DELETE 时,它会打印:

当前值:01234,选中:123

正如预期的那样,但如果我选择“123”并按“a”,它会打印:

当前值:04,选中:

这真的是它应该工作的方式还是一个错误?如果是前者:我将如何取回之前的选择?

我使用的是具有以下 wxpython 版本的 Linux 计算机:

4.1.1 gtk3(凤凰)wxWidgets 3.1.5

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。