python - 解绑 Window.grab_mouse
问题描述
有一个如何绑定和取消绑定文件从系统拖放到 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()
可能是什么问题呢?
解决方案
您正在停用 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()
推荐阅读
- java - 将字符串转换为 PDF
- javascript - 语法错误:JSON.parse 中位置 101033 的 JSON 中的意外令牌 { (
) 使固定? - c - 是否可以将 SSL_connect 用于 http?
- javascript - JS scrollIntoView 不使用焦点()
- node.js - 连接到 MongoDB Atlas 时 Node JS 服务器中的 EAI_AGAIN 错误
- windows - Blue Prism - 无法窥探 Windows 应用程序内的元素
- sql-server - '[07000] executeUpdate 方法不得返回结果集。' 在数据夹中
- c++ - 用于简单直流电机的 Arduino 代码,用于控制位置并允许固定臂在左右两侧连接的两个开关之间的周期性运动
- oracle - 为什么可插拔数据库用户成为管理员?
- php - 即使对 Apache 配置文件和 php.ini 进行了更改,HttpOnly 仍然设置为 false