在Windows上使用Pyinstaller创建kivy exe时,我仍然右键单击创建红点。
为什么右键单击会在圆的中心创建一个橙色的点?建议使用此来消除此行为。
from kivy.config import Config
Config.set('input', 'mouse', 'mouse,multitouch_on_demand')
但是当我这样做时,如果我按住小部件,我将无法再在页面上滚动。 难道没有更精确的东西,比如
deactivate_red_dot
而不是 deactivated_multitouch
,它似乎有副作用吗?也许我们可以重写 Mouse()
的方法?
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')
好的一面,不改变基本库。不好的一面是,禁用多点触控可能会导致其他偷偷摸摸的错误。
我这样做是为了不禁用我的多点触控:
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 条语句,以解决它们使用全局变量的令人讨厌的导入问题。
我现在还没有发现任何缺点,如果你知道或发现的话请告诉我!