覆盖剪切/复制/粘贴到wx.TextCtrl

时间:2012-05-10 20:04:53

标签: text widget wxpython copy-paste

所以我正在学习wxPython并且这样做我正在研究文本编辑器。我知道我可以通过绑定等效的wx.EVT_TEXT_COPY / wx.EVT_TEXT_PASTE / wx.EVT_TEXT_CUT拦截从控件生成的CUT / COPY / PASTE信号,例如wx.TextCtrl。我弄清楚的是如何用其他文字覆盖粘贴到剪贴板的粘贴。

例如,我有一个wx.ListBox,用户可以在其中存储文本片段,然后选择它们以粘贴到wx.TextCtrl而不是系统剪贴板上的任何文本。所以基本上我试图拦截粘贴信号,而不是粘贴系统剪贴板文本,它将粘贴wx.ListBox中的选定行。这可能吗?如果是这样,我该怎么做呢?

1 个答案:

答案 0 :(得分:2)

一个简单的解决方案是不要在Skip()处理程序中使用wx.EVT_TEXT_PASTE并手动更新控件,例如:

    textCtrl.Bind(wx.EVT_TEXT_PASTE, self.onPaste)

def onPaste(self, evt):
    #do not use evt.Skip()
    print "PASTE but nothing happens"
    #do some manual update of the control

evt.Skip()将导致传播事件并执行粘贴内容的默认行为。如果没有调用,您将阻止传播,并且您可以替换默认行为。