不允许在 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()
这个例子本质上是通过拒绝选择来工作的。
但是,如果您需要允许选择用于其他目的,例如更改样式,那么您需要在继续之前检查按下的键。
我使用 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()
这个例子本质上是通过拒绝选择来工作的。
但是,如果您需要允许选择用于其他目的,例如更改样式,那么您需要在继续之前检查按下的键。