Kivy调整窗口大小时发生异常位移无法正常缩放的问题求解
问题原因
你遇到的窗口缩放异常是Kivy旧版本搭配Pygame后端在Ubuntu 18.04双屏X11环境下的已知兼容性问题:
- 旧版Kivy默认使用Pygame作为窗口/图像渲染后端,而Pygame对多屏场景下的X11窗口坐标映射计算存在缺陷,拖拽窗口边角调整尺寸时,会错误计算窗口左上角的偏移值,导致窗口向相反方向移动
- 你收到的Pygame弃用警告和该问题直接相关,Kivy官方早已停止维护Pygame后端,该后端遗留了大量窗口交互相关的未修复bug
- 双屏环境下多屏幕的坐标原点映射逻辑异常,进一步放大了坐标计算错误的表现,就是你观察到的不同位置拖拽表现不一致的问题
解决方案
- 强制替换为SDL2后端
在代码所有Kivy相关导入的最前方加入环境变量配置,彻底禁用Pygame后端:
import os os.environ['KIVY_WINDOW'] = 'sdl2' os.environ['KIVY_IMAGE'] = 'sdl2'
修改前先安装SDL2对应的系统依赖:sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev
再安装Python依赖:pip install kivy.deps.sdl2 kivy.deps.glew
- 手动指定窗口初始位置
你已经发现窗口位于屏幕左上角时拖拽行为正常,可以主动固定窗口初始位置避免坐标计算异常:
from kivy.app import App from kivy.uix.label import Label from kivy.core.window import Window class MyApp(App): def build(self): # 手动指定窗口初始位置在主屏范围内 Window.top = 30 Window.left = 30 return Label(text="Moo") if __name__ == "__main__": MyApp().run()
- 升级Kivy到适配Python3.6的最新稳定版
Python3.6最高支持Kivy 1.11.1版本,升级后可修复大量已知的窗口交互bug:pip install --upgrade kivy==1.11.1
内容的提问来源于stack exchange,提问作者BareMetalCoder
相关产品推荐
相关产品推荐

