是否有可能看到文件是否被Kivy,Python中的窗口拖动?

时间:2016-12-01 19:45:24

标签: python file cursor kivy drag

我想要实现的目标:

我想检测用户在Kivy应用程序窗口上拖动文件时的情况。

我已经知道的事情:

我知道如何检测小部件上的悬停鼠标光标(使用on_mouse_pos),我也知道如何检测文件是否被放到窗口上(使用on_file_drop)。

那么,是否可以查看光标是否悬停在窗口上“保持”文件?因为那时我想显示一些提示(例如'Drop HERE')。我希望你能得到这个想法:)

1 个答案:

答案 0 :(得分:2)

我不是很确定,因为当Window只是暂停(尝试一些动画或其他东西)时,SDL2就会出现这种情况(甚至可能还有旧的pygame)用窗口装饰(标题和_ O X所在的东西)拖动它。如果您直接对Window执行某些操作,则会出现这种情况。

虽然,Window看起来像是正常行为(不会暂停),当你在它上面拖动文件时(我试过examples/animation/animate.py),你做了这样的事情需要执行悬停行为+处理碰撞或绑定到mouse_pos

然而,当绑定到mouse_pos时,似乎Window仍然无法处理来自外部的输入,同时正确获取鼠标属性(我认为它类似于单击并拖动WindowButton之外的行为仍然按下,但这种情况有点反转。

编辑了animate.py:

class TestApp(App):

    def on_mouse_pos(self, win, args):
        print args
    ...    
    def build(self):
        ...
        from kivy.core.window import Window
        Window.bind(mouse_pos=self.on_mouse_pos)
        return button

因此,如果在按住鼠标按钮时无法获得鼠标位置,我认为这样的动作是不可能的。但是,当您希望用户删除文件时,您可以将要删除文件的区域(例如更改背景)放在一边 - 对于这样的问题,从UI端进行非常脏的解决方法。

旁注:Kivy应该能够通过Cython获得大多数(如果不是全部)SDL2窗口事件,因此如果您在SDL2中发现可以获取鼠标位置的此类事件,则可以执行此类操作,可以在kivy/kivy中提出功能请求,也可以提出拉取请求。