有一个示例,说明如何将文件从系统拖放到Kivy应用程序中进行绑定和取消绑定。 (也许可以做得更好,但是现在很重要)
有2个按钮,左边的一个按钮(大致来说)允许删除文件,而右边的一个按钮则关闭此功能。
from kivy.core.window import Window
from kivy.lang import Builder
KV = '''
BoxLayout:
Button:
text: 'bind dropfile'
on_press: app.bind_dropfile()
Button:
text: 'unbind dropfile'
on_press: app.unbind_dropfile()
'''
class DropFileApp(App):
def build(self):
self.root = Builder.load_string(KV)
def manage_dropfile(self, window, fn):
print('do something')
def bind_dropfile(self):
Window.bind(on_dropfile=self.manage_dropfile)
print ('bound!')
def unbind_dropfile(self):
Window.unbind(on_dropfile=self.manage_dropfile)
print ('unbound!')
if __name__ == '__main__':
DropFileApp().run()
还有另一个类似的例子。 该应用程序还具有两个按钮。 我希望单击左按钮时,鼠标将仅限于应用程序窗口区域(将无法退出它),并且当我单击右按钮时,此功能将被禁用。 但是只有左键有效。
from kivy.app import App
from kivy.core.window import Window
from kivy.lang import Builder
KV = '''
BoxLayout:
Button:
text: 'bind grab_mouse'
on_press: app.bind_grab_mouse()
Button:
text: 'unbind grab_mouse'
on_press: app.unbind_grab_mouse()
'''
class DropFileApp(App):
def build(self):
self.root = Builder.load_string(KV)
def manage_grab_mouse(self, instance):
print('do something')
Window.grab_mouse()
def bind_grab_mouse(self):
Window.bind(on_cursor_leave=self.manage_grab_mouse)
print ('bound!')
def unbind_grab_mouse(self):
Window.unbind(on_cursor_leave=self.manage_grab_mouse)
print ('unbound!')
if __name__ == '__main__':
DropFileApp().run()
可能是什么问题?
答案 0 :(得分:1)
您正在停用on_cursor_leave事件和manage_grab_mouse函数之间的连接,但是您并未禁用grab_mouse功能。您需要做的是在bind_grab_mouse()函数中调用grab_mouse()和在ungrab_mouse()函数中调用ungrab_mouse(),而不必创建函数manage_grab_mouse。
from kivy.app import App
from kivy.core.window import Window
from kivy.lang import Builder
KV = '''
BoxLayout:
Button:
text: 'bind grab_mouse'
on_press: app.bind_grab_mouse()
Button:
text: 'unbind grab_mouse'
on_press: app.unbind_grab_mouse()
'''
class DropFileApp(App):
def build(self):
self.root = Builder.load_string(KV)
def bind_grab_mouse(self):
Window.grab_mouse()
def unbind_grab_mouse(self):
Window.ungrab_mouse()
if __name__ == '__main__':
DropFileApp().run()