python - wx.TreeCtrl 拖放、复制和移动

标签 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)

最佳答案

阅读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)

(第二个绑定(bind)避免了一个神秘的“捕获鼠标的窗口在拖动时没有处理 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)

关于python - wx.TreeCtrl 拖放、复制和移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3803386/

相关文章:

python - 如何在 python 脚本中完成多个 bash 脚本命令

java - 您如何处理数据处理的时区?

javascript - 放置事件未在 JS 中触发/触发

python - wxpython:自动调整静态图像(staticbitmap)的大小以适应大小

python - 为什么 PySpark 中的 agg() 一次只能汇总一列?

python - 在 Networkx 1.10 中,configuration_model() 获得了关键字参数 'create_using' 的多个值

reactjs - 将项目从一个时间线日历拖放到另一个 react

python - pyqt dropEvent 不会触发

python - wxPython按钮加载多个图像

Python,从 FFMPEG 中获取帧号