wx.TreeCtrl拖放,复制和移动

时间:2010-09-27 11:35:06

标签: python drag-and-drop wxpython

我正在尝试在wx.TreeCtrl上实现拖放操作,我需要同时处理这两个问题 “复制”和“移动”操作(如果用户按下CTRL键) 首先,我在wiki搜索了一个例子,我很困惑 使用哪种方法..我应该使用DropSource / DropTarget还是只使用 处理EVT_TREE_BEGIN_DRAG和EVT_TREE_END_DRAG?
如果是后者,如何判断用户是否正在请求“移动” 操作

(关于Ubuntu Jaunty的wxPython 2.8.9.1)

1 个答案:

答案 0 :(得分:3)

阅读Cross-Platform GUI Programming with wxWidgets中的相关段落,为我提供了解决问题的必要见解:) 最后我去了第一个解决方案(DropSource / DropTarget),所以:

tree.SetDropTarget(MyDropTarget())
tree.Bind(wx.EVT_TREE_BEGIN_DRAG, self.on_drag)
tree.GetMainWindow().Bind(wx.EVT_MOUSE_CAPTURE_LOST, lambda x: None)

(第二次绑定避免了一个神秘的“捕获鼠标的窗口在拖动时没有处理wxEVT_MOUSE_CAPTURE_LOST”)

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)