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 (将#修改为@)