不允许在wx.stc.StyledTextCtrl中选择要删除/替换的文本

问题描述 投票:0回答:1

我使用wxpython在python-3中创建了一个项目。我想知道是否存在防止删除文本的标记(灰色/蓝色正方形)的功能。例如,我要防止标记:“ bla bla 此文本已标记 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()
python-3.x user-interface text wxpython wxstyledtextctrl
1个回答
0
投票

如果没有本机函数来执行任务,则必须将其分解为一组将执行复合任务的函数/任务。我没有意识到StyledTextCtrl中的此类功能,因此我们必须确定组件任务,即:

已按下一个键有选择吗如果不跳过如果是这样,通过取消选择来防止删除`SetEmptySelection(position)是实现此目的的一种方法

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()

此示例通过实质上拒绝选择来工作。但是,如果您需要允许出于其他目的进行选择,例如更改样式,则需要在继续之前检查所按下的键。

© www.soinside.com 2019 - 2024. All rights reserved.