admin 管理员组

文章数量: 887018

如果想使用 Python 语言编写图形界面程序,那么有不少的框架可以提供支持,比如 KivyTkinter、PyQt、WxPython、pyui4win等等。

这些框架都是只能创建桌面图形界面程序,比如 Windows、Linux 和 macOS。

如果我们想要创建 IOS 或 Android 等平台的移动应用APP,它们就无能为力了。

那么 Python 能不能写移动应用APP呢?实际上是可以的。

Kivy 和 BeeWare 都宣称:一次编写,处处部署,基于这些个框架编写的图形界面程序,都能够打包为全平台的应用程序,比如:Windows、Linux、macOS、Android、IOS。

今天,我们就尝试使用一下 BeeWare 这个框架,编写一个图形界面程序,然后打包为一个安卓APP。

BeeWare 是一个基于 Python 构建的跨平台应用开发框架,其宣传:Write once. Deploy everywhere.

 能够让 Python 编写的图形程序在 iOS, Android, Windows, MacOS, Linux, Web, 和 tvOS 上运行,看起来是很强大的。

安装依赖

  1. 苹果系统
    1. git
    2. Xcode
  2. linux
    1. Ubuntu 16.04  18.04、20.04
      1. sudo apt-get update
      2. sudo apt-get install git python3-dev python3-venv python3-gi python3-gi-cairo libgirepository1.0-dev libcairo2-dev libpango1.0-dev libwebkitgtk-3.0-0 gir1.2-webkit2-3.0
    2. Fedora
      1. sudo dnf install git pkg-config python3-devel gobject-introspection-devel cairo-devel cairo-gobject-devel pango-devel webkitgtk4

安装

  1. pip install briefcase

创建应用

BeeWare 安装完成之后,我们就可以通过briefcase命令在命令行终端进行 BeeWare 应用的管理,比如新建、运行、构建、打包等等。

我们先使用命令briefcase new创建一个应用。

命令输入之后,会让我们输入「应用的正式名称」、「应用程序名称」、「域名」、「项目名称」等等信息,在这里出于演示,我们统统使用默认值。

  1. briefcase new 创建默认项目
  2. briefcase dev  运行项目
  3. 会出现GUI窗口

打包为Windows、mac、linux程序

  1. briefcase create        运行命令,将会生成一些预配置文件,然后下载依赖的包。完成之后,项目目录下会生成一个 (Windows、mac、linux)的目录
  2. briefcase build          构建应用
  3. briefcase run            运行构建的应用
  4. briefcase package    打包

更新应用

我们将应用程序打包为应用程序,我们在进行测试的时候会发现一些问题, 需要我们进行一些bug修复或者优化。即使应用程序是完美的,最终还是希望发布版本后, 需要具有改进功能的应用程序,那我们改怎么做呢?

更新应用程序代码

当按下按钮时,我们的应用程序当前会打印到控制台。但是,GUI 应用程序不应该真正使用控制台进行输出。他们需要使用对话与用户进行交流。

添加一个对话框来打招呼,而不是写到控制台。修改say_hello回调,使其看起来像这样:

def say_hello(self, widget):
    self.main_window.info_dialog(
        'Hello, {}'.format(self.name_input.value),
        'Hi there!'
    )

这会指示 Toga 在按下按钮时打开一个模式对话框。

如果你运行,输入一个名字,然后按下按钮,你会看到新的对话框:briefcase dev

但是,如果运行,则不会出现该对话框。briefcase run

为什么是这样?好吧,通过在适当的位置运行你的代码来运行 - 它试图为你的代码生成尽可能真实的运行时环境,但它不提供或使用任何平台基础结构来将你的代码包装为应用程序。打包你的应用程序的部分过程涉及将你的代码复制应用程序包中 - 目前,你的应用程序中仍然包含旧代码。briefcase dev

所以 - 我们需要告诉公文包复制新版本的代码。我们 可以通过删除旧的平台目录并从头开始做到这一点。但是,公文包提供了一种更简单的方法 - 你可以更新现有捆绑应用程序的代码:

如果 Briefcase 找不到脚手架模板,它会自动调用 create生成一个新的脚手架。

现在我们已经更新了安装程序代码,然后我们可以运行 重新编译的应用程序,运行更新的应用程序,并重新打包应用程序以进行分发。briefcase buildbriefcase runbriefcase package

一步更新和运行

如果你正在快速迭代代码更改,可能希望更改代码、更新应用程序并立即重新运行你的应用程序。公文包有一个支持这种使用模式的快捷方式 -命令上的-u(或 --update) 选项run

让我们尝试进行其他更改。你可能已经注意到,如果你不在文本输入框中键入名称,对话框将显示“您好,”。让我们say_hello再次修改 函数以处理这种边缘情况:

def say_hello(self, widget):
    if self.name_input.value:
        name = self.name_input.value
    else:
        name = 'stranger'

    self.main_window.info_dialog(
        'Hello, {}'.format(name),
        'Hi there!'
    )

在开发模式下运行你的应用程序(使用)以确认新逻辑有效;然后使用一个命令更新、构建和运行应用程序:briefcase dev

仅当你正在测试有关你的应用程序如何作为本机二进制文件运行的内容时,或寻找仅在你的应用程序处于打包形式时才会出现的错误时,才需要这样做。对于大多数日常开发, 会快很多。briefcase dev

package 命令也接受该-u参数,因此如果你对应用程序代码进行更改并希望立即重新打包,你可以运行 .briefcase package -u

打包为安卓APP、IOS

  1. briefcase create android        创建应用的安卓脚手架
  2. briefcase build android          构建安卓应用
  3. briefcase run android             运行构建好的安卓应用
  4. briefcase package android    打包安卓应用

打包为安卓IOS

  1. briefcase create iOS        创建应用的脚手架
  2. briefcase build iOS          构建应用
  3. briefcase run iOS -d "iPhone 11"            运行构建好的应用

本文标签: 图形 程序 python App iOS