You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy调整窗口大小时发生异常位移无法正常缩放的问题求解

问题原因

你遇到的窗口缩放异常是Kivy旧版本搭配Pygame后端在Ubuntu 18.04双屏X11环境下的已知兼容性问题:

  • 旧版Kivy默认使用Pygame作为窗口/图像渲染后端,而Pygame对多屏场景下的X11窗口坐标映射计算存在缺陷,拖拽窗口边角调整尺寸时,会错误计算窗口左上角的偏移值,导致窗口向相反方向移动
  • 你收到的Pygame弃用警告和该问题直接相关,Kivy官方早已停止维护Pygame后端,该后端遗留了大量窗口交互相关的未修复bug
  • 双屏环境下多屏幕的坐标原点映射逻辑异常,进一步放大了坐标计算错误的表现,就是你观察到的不同位置拖拽表现不一致的问题
解决方案
  1. 强制替换为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

  1. 手动指定窗口初始位置
    你已经发现窗口位于屏幕左上角时拖拽行为正常,可以主动固定窗口初始位置避免坐标计算异常:
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()
  1. 升级Kivy到适配Python3.6的最新稳定版
    Python3.6最高支持Kivy 1.11.1版本,升级后可修复大量已知的窗口交互bug:
    pip install --upgrade kivy==1.11.1

内容的提问来源于stack exchange,提问作者BareMetalCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:57:00