什么是我可以处理拖动和外部文件到我的框架上的事件

时间:2013-03-26 20:57:03

标签: python events drag-and-drop wxpython wxwidgets

我有代码正在将文件拖放到框架内的wx.FileDropTarget中。那不是我的问题。

我正在尝试制作一个自定义的“悬停”事件,在外部拖动的文件在我的框架上后被调用1秒。不幸的是,当从外部将外部文件拖到框架上时,不会调用wx.EVT_ENTER_WINDOW。

我想避免持续的光标检查和碰撞检测,因为我的应用程序更像是一个实用工具。 (我将使用我的应用程序使用小屏幕空间并在“悬停”在一个小框架上1秒后展开)

理想情况下,我想将代码(我的1秒计时器)添加到当我的应用程序点击时将光标从“文件”更改为“移动”光标的事件。

我正在学习wx,远离vb.NET。在vb.NET中有一个“Control.DragEnter”的事件处理程序。这就是我真正想要的。 wxpython等同于vb.NET“Control.DragEnter”

Private Sub _DragEnter(sender As Object, e As DragEventArgs) Handles Me.DragEnter
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        e.Effect = DragDropEffects.Move
    End If
    tmrHover = New Timer
    AddHandler tmrHover.Tick, AddressOf tmrHover_Tick
    tmrHover.Interval = 1000
    tmrHover.Start()
End Sub

提前致谢。

-Alex

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我第一次看文档的时候还不清楚,但是在这里它适用于其他所有人:

class MyFileDropTarget(wx.FileDropTarget):

    def __init__(self, mainFrame):
            wx.FileDropTarget.__init__(self)
            self.window = mainFrame

    def OnDropFiles(self, x, y, filenames):
            for fil in filenames:
                    print str(fil)

    def OnEnter(self, x, y, nul):
            self.window.OnDragEnter()
            return wx.DragMove

    def OnLeave(self):
            self.window.OnDragLeave()
            return

    def OnDragOver(self, x, y, nul):
            return wx.DragMove

感谢。

-Alex