0

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

下面是创建 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()
4

1 回答 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()

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

于 2019-11-25T17:34:39.243 回答