Python wx.TreeCtrl拖放、复制和移动

Python wx.TreeCtrl拖放、复制和移动,python,drag-and-drop,wxpython,Python,Drag And Drop,Wxpython,我试图在wx.TreeCtrl上实现拖放,我需要处理这两个问题 “复制”和“移动”操作(如果用户按住CTRL键)。 首先,我搜索了一个例子,我很困惑 要使用哪种方法。。我应该使用DropSource/DropTarget还是仅仅 处理EVT_树\u开始\u拖动和EVT_树\u结束\u拖动? 如果是后者,我如何判断用户是否请求“移动” 手术 (UbuntuJaunty上的wxPython 2.8.9.1)阅读中的相关段落为我提供了解决问题的必要见解:) 最后,我选择了第一个解决方案(DropSou

我试图在wx.TreeCtrl上实现拖放,我需要处理这两个问题 “复制”和“移动”操作(如果用户按住CTRL键)。
首先,我搜索了一个例子,我很困惑 要使用哪种方法。。我应该使用DropSource/DropTarget还是仅仅 处理EVT_树\u开始\u拖动和EVT_树\u结束\u拖动?
如果是后者,我如何判断用户是否请求“移动” 手术


(UbuntuJaunty上的wxPython 2.8.9.1)

阅读中的相关段落为我提供了解决问题的必要见解:)
最后,我选择了第一个解决方案(DropSource/DropTarget),因此:

(第二个绑定避免了在拖动时出现神秘的“捕获鼠标的窗口未处理wxEVT_mouse_CAPTURE_LOST”)

tree.SetDropTarget(MyDropTarget())
tree.Bind(wx.EVT_TREE_BEGIN_DRAG, self.on_drag)
tree.GetMainWindow().Bind(wx.EVT_MOUSE_CAPTURE_LOST, lambda x: None)
def on_drag(self, evt):
   # No evt.Allow() here, I won't use TreeCtrl's internal DND support
   item = evt.GetItem()
   if item == self.tree.GetRootItem():
      return
   dropsrc = wx.DropSource(self)
   # Populate dropsource
   # ...
   dropsrc.DoDragDrop(wx.Drag_AllowMove)