1

我有代码可以将文件拖放到框架内的 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

提前致谢。

-亚历克斯

4

1 回答 1

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

谢谢。

-亚历克斯

于 2013-03-27T13:37:48.917 回答