【问题标题】:wx.TreeCtrl drag and drop, copy and movewx.TreeCtrl 拖放、复制和移动
【发布时间】:2010-09-27 11:35:05
【问题描述】:

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

(Ubuntu Jaunty 上的 wxPython 2.8.9.1)

【问题讨论】:

    标签: python drag-and-drop wxpython


    【解决方案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)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      相关资源
      最近更新 更多