所以我正在学习wxPython并且这样做我正在研究文本编辑器。我知道我可以通过绑定等效的wx.EVT_TEXT_COPY / wx.EVT_TEXT_PASTE / wx.EVT_TEXT_CUT拦截从控件生成的CUT / COPY / PASTE信号,例如wx.TextCtrl。我弄清楚的是如何用其他文字覆盖粘贴到剪贴板的粘贴。
例如,我有一个wx.ListBox,用户可以在其中存储文本片段,然后选择它们以粘贴到wx.TextCtrl而不是系统剪贴板上的任何文本。所以基本上我试图拦截粘贴信号,而不是粘贴系统剪贴板文本,它将粘贴wx.ListBox中的选定行。这可能吗?如果是这样,我该怎么做呢?
答案 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()
将导致传播事件并执行粘贴内容的默认行为。如果没有调用,您将阻止传播,并且您可以替换默认行为。