wx.TreeCtrl перетаскивание, копирование и перемещение - PullRequest
2 голосов
/ 27 сентября 2010

Я пытаюсь реализовать перетаскивание на wx.TreeCtrl, и мне нужно обрабатывать оба Операции «копировать» и «переместить» (если пользователь удерживает нажатой клавишу CTRL).
Прежде всего, я искал wiki в качестве примера, и я запутался как какой метод использовать .. Должен ли я использовать DropSource / DropTarget или просто обрабатывать EVT_TREE_BEGIN_DRAG и EVT_TREE_END_DRAG?
Если последнее, как я могу сказать, если пользователь запрашивает "перемещение" работа

(wxPython 2.8.9.1 в Ubuntu Jaunty)

1 Ответ

3 голосов
/ 27 сентября 2010

Чтение соответствующего абзаца из Программирование кроссплатформенного графического интерфейса с помощью 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)
...