我使用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()
如果没有本机函数来执行任务,则必须将其分解为一组将执行复合任务的函数/任务。我没有意识到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()
此示例通过实质上拒绝选择来工作。但是,如果您需要允许出于其他目的进行选择,例如更改样式,则需要在继续之前检查所按下的键。