Kivy:在桌面上隐藏鼠标光标

Mad*_*Air 5 python kivy

我有一个全屏应用程序,我试图隐藏鼠标光标。该设置是Kivy 1.9.0的Python 3.4.1视窗,使用准备好的包。

我尝试了以下方法,但没有成功:

1-使用配置对象:

from kivy.config import Config
Config.set("graphics", "show_cursor", 0)
Run Code Online (Sandbox Code Playgroud)

2- 编辑 .kivy\config.ini:

[graphics]
.
.
.
show_cursor = 0
Run Code Online (Sandbox Code Playgroud)

3-使用pygame:

import pygame
pygame.init()
pygame.mouse.set_visible(False)
Run Code Online (Sandbox Code Playgroud)

4- 将鼠标移出屏幕:

def move_mouse_away(etype, motionevent):
  # this one doesn't get called at all
  Window.mouse_pos = [1400, 1000]

Window.bind(on_motion=move_mouse_away)
Run Code Online (Sandbox Code Playgroud)

5- 使用时钟实现类似效果:

Clock.schedule_interval(self._reset_mouse, 0.05)

def _reset_mouse(self, time):
  Window.mouse_pos = [1400, 1400]
Run Code Online (Sandbox Code Playgroud)

我现在有点想不通了。

小智 1

我遇到了同样的问题:我需要在 kivy 应用程序中隐藏或更改鼠标光标。

我没有完美的解决方案,只有部分解决方案:

from kivy.uix.widget import Widget
from kivy.core.window import Window
import win32api

class NoCursorWindow(Widget):

    def __init__(self, **kwargs):
        super(NoCursorWindow, self).__init__(**kwargs)

        Window.bind(mouse_pos=self.on_mouse_pos)

    def on_mouse_pos(self, *args):
        win32api.SetCursor(None)


if __name__ == '__main__':
    from kivy.base import runTouchApp
    runTouchApp(NoCursorWindow())
Run Code Online (Sandbox Code Playgroud)

它只能部分工作:使用时的问题win32api.SetCursor()是,当鼠标移动时,窗口会收到一条WM_SETCURSOR消息,将光标更改回默认值。这就是为什么win32api.SetCursor()的每次更改都必须触发 的原因mouse_pos

但即使这样,有时我们还是会看到默认光标在闪烁。

如果有人知道如何挂钩WM_SETCURSOR, 以防止默认光标的回调,它可以解决这个问题......