解除绑定窗口。抓取鼠标

2024-03-29 11:48:00 发布

您现在位置:Python中文网/ 问答频道 /正文

这里有一个关于如何绑定和解除绑定文件的示例;从系统中放入Kivy应用程序。 (也许这可以做得更好,但现在重要的是它能起作用)

有两个按钮,左一个(粗略地说)启用文件放置,右一个-关闭此功能

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()

有什么问题吗


Tags: fromimportselfappmanagebindondef
1条回答
网友
1楼 · 发布于 2024-03-29 11:48:00

您正在停用on_cursor_leave事件与manage_grab_鼠标功能之间的连接,但未禁用grab_鼠标功能。您需要做的是在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()

相关问题 更多 >