不允许在 wx.stc.StyledTextCtrl 中选择 deletion/replacement 的文本

Don't allow selection of text for deletion/replacement in wx.stc.StyledTextCtrl

我使用 wxpython 在 python-3 中创建了一个项目。我想知道是否有一个功能可以防止标记文本(在 grey/blue 方块中)以供删除。 例如我想防止标记:"bla bla this text is marked bla bla"。我不想让用户标记他的文本,然后按 delete 键或另一个会导致标记文本被删除的键。 如果有人知道,另一种选择是如何识别当前是否有标记的文本或标记文本的长度,我会做其他事情。

这是创建 wx.stc.StyledTextCtrl 的基本代码:

import wx
from wx.stc import StyledTextCtrl

app = wx.App()
frame = wx.Frame(None, -1, title='2', pos=(0, 0), size=(500, 500))
frame.Show(True)
messageTxt = StyledTextCtrl(frame, id=wx.ID_ANY, pos=(0, 0), size=(100 * 3, 100),
                            style=wx.TE_MULTILINE, name="File")

app.SetTopWindow(frame)
app.MainLoop()

如果没有执行任务的本机函数,您必须将其分解为一组 functions/tasks 来执行复合任务。
我在StyledTextCtrl中不知道有这样的功能,所以我们必须确定组件任务,即:

a key has been pressed
has a selection been made
if not skip
if so prevent the deletion by cancelling the selection
`SetEmptySelection(position) is one way to achieve this

import wx
from wx.stc import StyledTextCtrl

def On_KeyDown(evt):
    x, y = messageTxt.GetSelection()
    # If something is selected, de-select it
    if x != y:
        messageTxt.SetEmptySelection(y)
    else:
        evt.Skip()

app = wx.App()
frame = wx.Frame(None, -1, title='2', pos=(0, 0), size=(500, 500))
frame.Show(True)
messageTxt = StyledTextCtrl(frame, id=wx.ID_ANY, pos=(0, 0), size=(100 * 3, 100),
                            style=wx.TE_MULTILINE, name="File")

messageTxt.Bind(wx.EVT_KEY_DOWN, On_KeyDown)

app.SetTopWindow(frame)
app.MainLoop()

这个例子本质上是通过拒绝选择来工作的。
但是,如果您需要允许选择用于其他目的,例如更改样式,那么您需要在继续之前检查按下的键。