我想要实现的目标:
我想检测用户在Kivy应用程序窗口上拖动文件时的情况。
我已经知道的事情:
我知道如何检测小部件上的悬停鼠标光标(使用on_mouse_pos
),我也知道如何检测文件是否被放到窗口上(使用on_file_drop
)。
那么,是否可以查看光标是否悬停在窗口上并“保持”文件?因为那时我想显示一些提示(例如'Drop HERE')。我希望你能得到这个想法:)
答案 0 :(得分:2)
我不是很确定,因为当Window
只是暂停(尝试一些动画或其他东西)时,SDL2就会出现这种情况(甚至可能还有旧的pygame)用窗口装饰(标题和_ O X
所在的东西)拖动它。如果您直接对Window
执行某些操作,则会出现这种情况。
虽然,Window
看起来像是正常行为(不会暂停),当你在它上面拖动文件时(我试过examples/animation/animate.py
),你做了这样的事情需要执行悬停行为+处理碰撞或绑定到mouse_pos
。
然而,当绑定到mouse_pos
时,似乎Window
仍然无法处理来自外部的输入,同时正确获取鼠标属性(我认为它类似于单击并拖动Window
和Button
之外的行为仍然按下,但这种情况有点反转。
编辑了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中提出功能请求,也可以提出拉取请求。