2

我在 python-3 中做了一个项目,并用 wxpython 创建了一个 gui。在 gui 中,我使用 wx.stc.StyledTextCtrl 并且我不希望用户无法撤消 (Ctrl + Z)。有一个选项可以做到这一点?如果有人知道如何不允许(Ctrl + V),那也很棒。

感谢回答的人!

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

2 回答 2

1

您可以将 StyledTextCtrl 绑定到EVT_KEY_DOWN事件并在按下控制键时阻止 V 和 Z 键。使用您的示例:

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


def on_key_down(evt):
    """
    :param evt:
    :type evt: wx.KeyEvent
    :return:
    :rtype:
    """

    if evt.CmdDown() and evt.GetKeyCode() in (ord("Z"), ord("V")):
        print("vetoing control v/z")
        return
    # allow all other keys to proceed
    evt.Skip()


messageTxt.Bind(wx.EVT_KEY_DOWN, on_key_down)

app.SetTopWindow(frame)
app.MainLoop()
于 2019-11-25T01:42:43.290 回答
1

另一种选择是使用stc'sCmdKeyClear功能,它允许stc为您完成工作。

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

messageTxt.CmdKeyClear(ord('V'), wx.stc.STC_SCMOD_CTRL)
messageTxt.CmdKeyClear(ord('Z'), wx.stc.STC_SCMOD_CTRL)

app.SetTopWindow(frame)
app.MainLoop()
于 2019-11-25T11:16:19.957 回答