Kivy:删除右键上的红点创建

问题描述 投票:0回答:2

在Windows上使用Pyinstaller创建kivy exe时,我仍然右键单击创建红点。

为什么右键单击会在圆的中心创建一个橙色的点?建议使用此来消除此行为。

from kivy.config import Config
Config.set('input', 'mouse', 'mouse,multitouch_on_demand')

但是当我这样做时,如果我按住小部件,我将无法再在页面上滚动。 难道没有更精确的东西,比如

deactivate_red_dot
而不是
deactivated_multitouch
,它似乎有副作用吗?也许我们可以重写
Mouse()
的方法?

kivy mouse
2个回答
2
投票

venv/Lib/site_packages/kivy/input/providers/mouse.py

方法

on_mouse_press

更换

do_graphics = (not self.disable_multitouch) and (
                button != 'left' or 'ctrl' in modifiers)

do_graphics = False

我不确定我是否不会产生其他副作用,但从我在代码中看到的行为来看,这似乎是合法的。

编辑: 实际上,对于我的项目来说,禁用多点触控的错误是在 Android 上,所以我这样做了:

if isWindows():
    from kivy.config import Config
    Config.set('input', 'mouse', 'mouse,disable_multitouch')

好的一面,不改变基本库。不好的一面是,禁用多点触控可能会导致其他偷偷摸摸的错误。


0
投票

我这样做是为了不禁用我的多点触控:

import kivy

# a modified copy of the original from github
def update_graphics(self, win, create=False):
    Color, Ellipse = (kivy.input.providers.mouse.Color, kivy.input.providers.mouse.Ellipse)
    de = self.ud.get('_drawelement', None)
    if de is None and create:
        if Color is None:
            from kivy.graphics import Color, Ellipse
            kivy.input.providers.mouse.Color, kivy.input.providers.mouse.Ellipse = (Color, Ellipse)
    if de is not None:
        self.push()
        w, h = win._get_effective_size()
        self.scale_for_screen(w, h, rotation=win.rotation)
        de[1].pos = self.x - 10, self.y - 10
        self.pop()
kivy.input.providers.mouse.MouseMotionEvent.update_graphics = update_graphics

我简单地用画布剪切了部分,并为颜色和椭圆添加了 2 条语句,以解决它们使用全局变量的令人讨厌的导入问题。

我现在还没有发现任何缺点,如果你知道或发现的话请告诉我!

© www.soinside.com 2019 - 2024. All rights reserved.