wxpython树形控件中使用拖放功能
前言
- 在 wxpython 的树形控件(wx.TreeCtrl)中使用拖放功能是一种比较方便和实用的功能。但是要在代码中实现这种功能还是比较复杂的,本文初步探讨了其实现方法。
目标
- 在一个树形控件中,实现任意项目 wx.TreeItemId(根目录除外)拖放至任意其它项目上,成为目标项目的子项。如果被拖放的项目下含有子项目,其子项目也一并拖放至目标位置。
界面
代码
import wx
class MyTextDropTarget(wx.TextDropTarget):
def __init__(self, obj):
super().__init__()
self.object = obj
self.target_item = wx.TreeItemId()
def OnDropText(self, x, y, data) -> bool:
point = wx.Point(x, y)
item, flags = self.object.HitTest(point)
if item.IsOk():
self.target_item = item
return True
class MyTree(wx.TreeCtrl):
def __init__(self, parent):
super().__init__(parent)
self.text = ''
self.dragged_item = None
self.dt = MyTextDropTarget(self)
self.SetDropTarget(self.dt)
self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.on_begin_drag)
self.Bind(wx.EVT_TREE_END_DRAG, self.on_end_drag)
def on_begin_drag(self, event):
self.dragged_item = event.GetItem()
item_id = self