Kivy应用每次启动文本颜色随机异常(Python3.7.3/Kivy1.10.1/Win10 1809)
嘿,你遇到的这个问题确实挺诡异的——默认白色文本随机变灰/黑,还伴随那个奇怪的REX.w指令报错,结合你的环境(Python3.7.3 + Kivy1.10.1 + Win10 1809),我来给你分析下原因和解决办法:
问题根源分析
那个ANOMALY: use of REX.w is meaningless报错其实是旧版SDL2(Kivy依赖的图形库)在64位Windows系统上的一个已知兼容小问题,而文本颜色随机异常大概率是因为Kivy1.10.1(2018年的老版本)和Win10 1809的图形渲染逻辑不兼容导致的,毕竟Win10 1809是2018年底推出的,后续Kivy才针对新版本系统做了适配。
可行的解决方案
1. 升级Kivy到兼容版本
Kivy1.10.1太老了,和Win10 1809的兼容性不好,建议升级到支持Python3.7的稳定版(比如2.1.0,这是支持Python3.7的最后一个Kivy大版本):
pip install --upgrade kivy==2.1.0
升级后不仅能解决那个REX.w报错,也能修复文本渲染的随机异常。
2. 强制切换Kivy图形后端
如果暂时不想升级Kivy,可以试试切换图形渲染后端,绕开默认后端的兼容问题:
- 在你的
mytest.py开头添加以下代码:
from kivy.config import Config # 强制使用Angle后端,适配Windows系统 Config.set('graphics', 'backend', 'angle_sdl2')
或者在运行脚本前先设置环境变量:
set KIVY_GRAPHICS_BACKEND=angle_sdl2 python mytest.py
3. 更新Windows显卡驱动
Win10 1809的旧显卡驱动可能和Kivy的OpenGL渲染逻辑冲突,建议打开显卡厂商的驱动管理工具(比如NVIDIA GeForce Experience、AMD Radeon Software),把驱动更新到兼容Win10 1809的最新版本。
4. 临时强制文本颜色(快速 workaround)
如果需要立刻解决文本颜色问题,可以手动在kv文件里强制设置文本为白色:
修改你的mytest.kv文件,给所有Label和TextInput添加颜色属性:
<MyGrid> textinput_1: textinput_1 GridLayout: cols: 3 size: root.width, root.height Label: text: "Text 1" color: 1, 1, 1, 1 # RGBA格式的白色 TextInput: id: textinput_1 multiline: False foreground_color: 1, 1, 1, 1 # 文本输入框的前景色 Button: text: "Print & erase" on_release: root.print_erase_all_text(textinput_1) # 下面的Label和TextInput同理,都加上对应的color/foreground_color属性 Label: text: "Text 2" color: 1, 1, 1, 1 TextInput: multiline: False foreground_color: 1, 1, 1, 1 Button: text: "Do nothing" Label: text: "Text 3" color: 1, 1, 1, 1 TextInput: multiline: False foreground_color: 1, 1, 1, 1 Button: text: "Do nothing"
内容的提问来源于stack exchange,提问作者ElSploochy

