2010-09-27 78 views
2

我試圖在wx.TreeCtrl上實現拖放操作,我需要處理 「複製」和「移動」操作(如果用戶按住CTRL鍵) 。
首先,我搜索了wiki的一個例子,我很困惑 要使用哪種方法..我應該使用DropSource/DropTarget還是僅僅使用 處理EVT_TREE_BEGIN_DRAG和EVT_TREE_END_DRAG?
如果是後者,如何判斷用戶是否請求「移動」 操作?wx.TreeCtrl拖放,複製和移動

(在Ubuntu的Jaunty wxPython的2.8.9.1)

回答

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)