beeware 教程中文版同步对照

1.1 beeware

    • 手机码字易错漏,一些链接不好加,回去摸到电脑一定改,还请大家暂时见谅…

手机码字易错漏,一些链接不好加,回去摸到电脑一定改,还请大家暂时见谅…

  • 品名:蜂具
  • 配料:toga、briefcase、rubicon objectc、rubicon java(译注:他说你可以不用python,但后面貌似并没有说不用Python怎么办另有一致命弱点,他的全部文件都要网络下载,而且全部会存在appdata下,小心硬盘!
  • 参考参数:联通千兆宽带,前7step下载累计用时50min,build累计用时70min

(哈哈差点打表都不会了)如果你想要跑蜂具,你的系统盘需要

功能 累计系统盘所需空间
python运行 300M
Windows等编译打包 500M
android虚拟机build 7GB
android虚拟机run 8GB

(链接)蒟蒻独家硬盘清理方式

  • 主治功能:让你的程序:码一次,到处跑!
    (译注:我很怀疑)
  • 适用人群:目前蜂具已经支持windows mac linux ios android和web啦,不过web功能还不太成熟
    (正式开始)
第零步

1.1 安装一个3.7或以上的python和一个git,然后保证能从系统命令运行他们

(译注:python如果你不想给自己找事最好装3.8,另,你不需要手动检查是否添加到环境变量,如果你安装了而它提示你没安装那就是没添加,你只需要重装一次(python/git)软件就可了)
1.2 创建一个虚拟环境,然后所有组件会被隔离在里面,这样即使你的程序裂开来也不会炸到电脑。这是可选的
(译注:确实可以有保护作用,但是千万不要以为删掉虚拟环境就可完事了)

md beeware-tutorial
cd beeware-tutorial
::你也可以在你想创建的文件夹(最好为空)里Shift+右键,等价于上2
py -m venv beeware-venv
::py是python.exe,前提是你要在环境变量里
beeware-venv\Scripts\activate.bat
::script是自动生成的
注意
以后你重启软件或电脑 仍需重复此操作
我认为最快捷的方式是
桌面shift右键-拖入activate bat快捷方式enter再输入cd 你的工程名也就是文件夹名

(此处应有动图虚拟环境)

第一步

首先你要安装briefcase

python -m pip install briefcase

然后接下来全在跟briefcase打交道了
briefcase步骤1

briefcase new
cd helloworld
::或者你自己的appname,无空格
briefcase dev

译注:new命令弹出的选项解释

干嘛的 默认值(直接回车)
formal name 没嘛用 hello world
app name app名称,唯一有点用的 hello world
project name 也没嘛用 hello world
bundle 域名,如果你有 com.example
description 描述,无关紧要 hello world
author 作者 怎可能有默认值?
author’s email 作者 怎可能有默认值?
url 你的网址 https://example.com/helloworld
License 许可证,随 BSD
GUI framework 图形用户界面用什么格式 toga

然后现在会bling地弹一个窗口出来,关掉继续

现在你已经用掉了300MB系统盘和50MB内存

第二步

程序的脚本是helloworld/src/helloworld/app.py,其他两个看看就好
接下来的话,如果你想试试,你可以把helloworld class替换成下面这坨,但是不要动头尾不属于class的内容

class HelloWorld(toga.App):
    def startup(self):
        main_box = toga.Box(style=Pack(direction=COLUMN))

        name_label = toga.Label(
            'Your name: ',
            style=Pack(padding=(0, 5))
        )
        self.name_input = toga.TextInput(style=Pack(flex=1))

        name_box = toga.Box(style=Pack(direction=ROW, padding=5))
        name_box.add(name_label)
        name_box.add(self.name_input)

        button = toga.Button(
            'Say Hello!',
            on_press=self.say_hello,
            style=Pack(padding=5)
        )

        main_box.add(name_box)
        main_box.add(button)

        self.main_window = toga.MainWindow(title=self.formal_name)
        self.main_window.content = main_box
        self.main_window.show()

    def say_hello(self, widget):
        print("Hello", self.name_input.value)
注意
不推荐这样学toga-既然你已经知道在什么地方加入设计代码了-你就应该先明白自己想设计什么-要啥控件再搜索实现方法去学习
引用coder-pig大大一句话-你是学习不是收藏不属于自己的laji
另外-假如你是直奔安卓而去-toga设计效率远不如android studio的xml设计
briefcase dev
briefcase run
::因为briefcase是自动运行的所以你可以打briefcase dev或者briefcase run -d
第三步

将你的程序变成windows安装包

briefcase create
::会要等一会
briefcase build
briefcase run
::运行你的application,如果你要打包,这一句可以忽略
briefcase package
第四步

4.1. 如何在改变了源程序后更新应用文件

briefcase update
briefcase run
::等价于briefcase run -u
  1. 如何在改变了源程序后更新安装包
briefcase update
briefcase package
::等价于briefcase package -u
briefcase new
briefcase dev
briefcase run
briefcase run -d
briefcase create 第一次
briefcase build/update
briefcase build/update
briefcase package
briefcase run -u
briefcase package -u
安装
总结亿下
开始
新项目app.py
exe,obj等输出
应用程序运行!
应用构建环境
应用构建中间文件
应用程序安装包
应用运行!
第五步

选择你的移动载体(我是按照安卓的做下去的了)

第六步

使用这三条命令一次完成android构建

briefcase create android
briefcase build android
briefcase run android
注意-第一条命令将使用约3GB硬存-第二条命令可能会使用约5GB硬存-都会在你的C盘
同时建议为安卓虚拟机保留2G内存-随时检查内存情况-避免浪费自己的时间
假如内存不够那么虚拟机会莫名其妙crash而没有任何信息

(再次链接)蒟蒻独家高效清理硬盘提示

第七步

前半部分都是在用肺说话,告诉你用第三方包要先import,诶咋炸了鸭?哦原来系没install哦(。。。)
但是我们不能炸用户的电脑啊,于是我们请briefcase帮 我们先install。打开helloworld/pyproject.toml,找到requires = []中括号里加入以下格式的包名一个一行

requires = [
    "包名>=版本",
    "包名==版本",
    "git+https://github.com/encode/httpx"
]

编辑好后运行以下即可

briefcase update -d
注意-部分包含二进制库文件的包是不能够放进apk的如numpy-因为安卓系统本质上是java解释执行-你给他已经编译好的东西他反而没办法
据说华为和他的方舟编译器解决了这一问题-让我们拭目以待叭
第七步

让他变得siiiiii滑
用人话来说就是将同步加载换成异步加载(好吧好像也不是人话)
使用python并成功到达这一步的同学很幸运,我在AndroidStudio搞EventLoop搞得晕死

知识补充-EventLoop是一种机制-也是个变量\n一般我们将耗时任务交给后台处理使前台能响应用户操作时-EventLoop就能发挥前后台信息传递作用

那么python中咋搞嘞

async def say_hello(self, widget):#加入了关键字async
    if self.name_input.value:
        name = self.name_input.value
    else:
        name = 'stranger'

    async with httpx.AsyncClient() as client:#加入了async with关键字和AsyncClient方法
        response = await client.get("https://jsonplaceholder.typicode.com/posts/42")#通过awaitclient获得结果,这样子你可以当response里面已经有结果了,虽然实际运行时里面并没有

    payload = response.json()

    self.main_window.info_dialog(
        "Hello, {}".format(name),
        payload["body"],
    )
第八九十步

更换你的图标,公布在网上,然后发布(作者说:待更)hhhhhhhg那我也待更好吗
链接其他选项
链接toga控件

你可能感兴趣的:(python,android)