【问题标题】:Don't allow selection of text for deletion/replacement in wx.stc.StyledTextCtrl不允许在 wx.stc.StyledTextCtrl 中选择要删除/替换的文本
【发布时间】:2019-11-25 10:57:22
【问题描述】:

我使用 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()

【问题讨论】:

  • 欢迎来到 SO!为了发布问题,您应该携带最少信息作为输入样本和预期输出样本(如果需要),您尝试了什么以及您的研究,以显示一些努力。你尝试了什么?
  • 我在 wx.stc.StyledTextCtrl 的文档中搜索了一个可以做到这一点的函数,但我没有找到。也许我没有注意到有一个?

标签: python-3.x user-interface text wxpython wxstyledtextctrl


【解决方案1】:

如果没有执行任务的本机函数,则必须将其分解为一组执行复合任务的函数/任务。
我不知道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()

这个例子的工作原理是拒绝选择。
但是,如果您需要允许出于其他目的进行选择,例如更改样式,则需要在继续之前检查按下的键。

【讨论】:

  • 非常感谢。告诉我,您是如何找到 SetEmptySelection() 和 GetSelection 函数的。我试图搜索它们,但没有成功。你能告诉我你的技术是什么吗?
  • 我只是阅读了手册。我个人从来没有需要使用StyledTextCtrl。我在之前的评论中链接到了在线手册,但是一些好管闲事的管理员删除了评论,天知道为什么!如果他们正在阅读这篇文章,也许他们应该考虑把它放回去。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
相关资源
最近更新 更多