使用PyInstaller打包Kivy应用生成Windows exe后出现黑屏问题求助
问题原因
- 你配置的.spec文件中
datas字段为空,PyInstaller不会自动打包Kivy的kv布局文件,导致exe运行时找不到布局配置,仅渲染空窗口(你所说的黑屏)。 - Kivy默认通过App类名自动匹配kv文件的规则在打包后的运行环境中容易出现路径读取失败的问题,进一步加剧布局加载失败。
修复步骤
步骤1:修改.spec配置文件
把datas = []替换为以下内容,告诉PyInstaller要把kv文件打包到运行目录:
datas=[('democlass.kv', '.')],
如果后续还有其他静态资源(比如图片、字体等),也按照(源文件路径, 打包后存放路径)的格式添加到datas列表即可。
如果修改后还是无法显示组件,可以在hiddenimports字段补充Kivy组件的导入声明:
hiddenimports=['kivy.uix.gridlayout', 'kivy.uix.label', 'kivy.uix.textinput', 'kivy.uix.button'],
步骤2(可选,更稳定):手动加载kv文件
在你的.py代码开头手动加载kv文件,避免自动匹配的路径问题,修改后的代码如下:
from kivy.app import App from kivy.lang import Builder from kivy.uix.gridlayout import GridLayout from kivy.properties import ObjectProperty # 手动加载kv文件 Builder.load_file('democlass.kv') class Demo(GridLayout): name = ObjectProperty(None) age = ObjectProperty(None) def on_click(self): print("My name is {} and my age is {}".format(self.name.text, self.age.text)) self.name.text = "" self.age.text = "" class DemoClassApp(App): def build(self): return Demo() if __name__ == "__main__": DemoClassApp().run()
步骤3:重新打包
修改完配置后,用修改后的.spec文件重新执行打包命令:pyinstaller app1.spec
打包完成后进入dist/app1目录运行exe即可正常显示组件。
验证小技巧
你可以先不修改spec,直接把democlass.kv复制到打包生成的exe所在目录,运行exe如果能正常显示,就能100%确认是kv文件未被打包的问题。
内容的提问来源于stack exchange,提问作者deepan
相关产品推荐
相关产品推荐

