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

Windows10环境下免虚拟机免费将Python+Kivy项目打包为APP咨询

Kivy计算器Windows下免虚拟机打包解决方案

闪退原因&代码前置修复

你此前打包闪退主要有3个代码层面的问题,先修正后再打包即可:

  1. 类命名冲突:自定义应用类直接命名为App,和导入的kivy官方App类重名,打包时类解析出错
  2. 安卓环境不兼容代码:Window.size = (500,700)是Windows端窗口设置,安卓无此属性,运行到此处直接崩溃
  3. kv文件加载路径问题:手动调用Builder.load_file在打包后的环境中容易出现路径找不到的问题

修正后calc.py代码

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.core.window import Window
from kivy.uix.button import Button
import platform

# 仅Windows环境下设置窗口大小
if platform.system() == 'Windows':
    Window.size = (500,700)

class MyLayout(Widget):
    pass

class Screen1(Screen):
     def clear (self):
         self.ids.calc_input.text = "0"
     def button_press(self, button):
         prior = self.ids.calc_input.text
         if prior == "0":
             self.ids.calc_input.text = str(button)
         else:
             self.ids.calc_input.text = f'{prior}{button}'
     def  math_sign(self, sign):
         prior = self.ids.calc_input.text
         self.ids.calc_input.text = f'{prior}{sign}'

     def remove(self):
          prior = self.ids.calc_input.text
          # 增加边界判断,避免空内容退格报错
          if len(prior) <= 1:
              self.ids.calc_input.text = "0"
          else:
              self.ids.calc_input.text = prior[:-1]

     def dot(self):
         prior = self.ids.calc_input.text 
         num_list = prior.split("+")
         if "." not in num_list[-1]:
             prior = f'{prior}.'
         self.ids.calc_input.text = prior                  

     def equals(self):
            prior = self.ids.calc_input.text
            try:
                answer = eval(prior)
                self.ids.calc_input.text = str(answer)
            except:
                self.ids.calc_input.text = "错误"

class WindowManager(ScreenManager):
    pass

# 重命名应用类,避免和父类重名
class CalculatorApp(App):
    def build(self):
        return WindowManager()

if __name__ == "__main__":
     CalculatorApp().run()

修正后kv文件

将原calc.kv重命名为calculator.kv(和应用类名小写匹配,kivy自动加载,无需手动调用load_file),内容如下:

#:kivy 2.0.0
<WindowManager>:
    Screen1


<Screen1>:
    BoxLayout:
        orientation:"vertical"
        size: root.width, root.height

        TextInput:
            id: calc_input
            text: "0"
            halign: "right"
            font_size : 65
            size_hint: (1, .15)

        GridLayout:
            cols:4
            rows:5

            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "<<<"
                on_press : root.remove()


            Button:
                id: clear
                size_hint: (.2, .2)
                font_size: 32
                text: "C"
                on_press : root.clear()

            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "/"
                on_press : root.math_sign("/")


            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "7"
                on_press : root.button_press(7)

            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "8"
                on_press : root.button_press(8)


            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "9"
                on_press : root.button_press(9)


            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "x"
                on_press : root.math_sign("*")


            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "4"
                on_press : root.button_press(4)


            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "5"
                on_press : root.button_press(5)


            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "6"
                on_press : root.button_press(6)


            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "-"
                on_press : root.math_sign("-")


            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "1"
                on_press : root.button_press(1)


            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "2"
                on_press : root.button_press(2)


            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "3"
                on_press : root.button_press(3)


            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "+"
                on_press : root.math_sign("+")


            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "0"
                on_press : root.button_press(0)


            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "."
                on_press : root.dot()

            Button:
                size_hint: (.2, .2)
                font_size: 32
                text: "="
                on_press :root.equals()

打包方案

方案1:打包为Windows端独立exe(完全原生,无需虚拟机)

使用PyInstaller直接在Windows10环境下打包,步骤如下:

  • 打开cmd,安装所需依赖:
    pip install pyinstaller kivy.deps.sdl2 kivy.deps.glew
  • 进入项目文件夹(calculator.py和calculator.kv存放目录),执行打包命令:
    pyinstaller --onefile --windowed --add-data "calculator.kv;." calculator.py
  • 打包完成后,可独立运行的exe文件存放在生成的dist文件夹内,无需依赖Python环境即可直接运行。

方案2:打包为安卓APK(Windows下无需虚拟机,修正Colab打包逻辑)

你此前Colab打包闪退就是因为代码没有修正,按以下步骤调整即可:

  1. 用上面修正后的代码上传到Colab
  2. 生成buildozer.spec配置文件后,修改以下配置项:
  • source.include_exts = py,png,jpg,kv,atlas 确保kv文件被打包进资源
  • android.api = 33 选择兼容性较好的安卓API版本
  • android.apptheme = @android:style/Theme.NoTitleBar 避免主题兼容问题
  1. 重新运行打包命令,生成的APK即可正常安装运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:15:00