你好,世界!

Screenshot_2015-03-13-10-56-43.png
图 使用编辑器编写代码

Screenshot_2015-03-13-10-57-19.png
图 点击运行运行

这样,在你已经对 QPython 有点熟悉之后,让我们在 QPython 中创建第一个程序。明显地,它就是“你好、世界!”。

启动 QPython,打开编辑,然后键入以下代码并保存到 /sdcard/com.hipipal.qpyplus/scripts/helloworld.py:

import androidhelper
droid = androidhelper.Android()
droid.makeToast('Hello, Username!')

毫无疑问,它就像其他“你好,世界”程序一样。当执行时,它仅仅在屏幕上显示一个弹出的消息(看屏幕的地步)。无论如何,他是一个不错的 QPython 程序示范。

当然,你也可以在 PC 上敲好代码,然后上传到你的手机或平板上,并运行。

或者,通过 QPython 的在线 QRCode 代码生成器,生成代码后,用 QPython 的“从 QRCode 中读取代码”功能将代码扫描进入手机。

小技巧:如果用 QRCode 扫描,那么在代码头部插入 "#qpy:(文件名)" 或者 "#qpy:(url)/(文件名)" 则可以让其保存为指定的文件名。

SL4A 库

SL4A 是支持驱动安卓特性工作的脚本库。

在 QPython 中它以 import androidhelper 开始 —— QPython 里最有用的模块之一,它用 Python 的形式封装了几乎所有的安卓接口。 在 QPython 里开发的任何脚本,如果想要调用安卓的 SL4A 接口,都需要以这则声明开始(至少它可以和用户通信)。

了解关于 Python 库的更多import 声明

顺便提一下,如果你要让你的脚本兼容其他 SL4A 库,你最好用下列代码替换迪一行(并且在程序里进一步使用 android 替代 androidhelper):

try:
    import androidhelper as android
except ImportError:
    import android

好了,接下来,我们要创建一个 droid 对象(实际上是一个类),调用 RPC 函数来与安卓系统通信是很有必要的。

同时,我们代码的最后一样会调用类似的方法 droid.makeToast(),它将会在屏幕上显示一个弹出消息(一个“吐司”消息)。

好了,接下来,我们会添加更多的功能。让它向用户询问用户的名字并且问候他们。

更多例子

参考以下代码来替换你代码的最后一行,我们就能够使用 dialogGetInput 调用来显示一个对话框盒子,带标题,提示,编辑区域和取消按钮:

import androidhelper
droid = androidhelper.Android()
respond = droid.dialogGetInput("Hello", "What is your name?")

接下来,我想它将要返回任何响应和用户行为,那正是我写 respond = ... 的原因。但是这个调用实际返回什么?让我们检查下,在最后一行增加一个 print 声明:

import androidhelper
droid = androidhelper.Android()
respond = droid.dialogGetInput("Hello", "What is your name?")
print respond

然后保存并且运行它...

正向你所看到的, droid.dialogGetInput() 返回了一个带有3个项目的 JSON 对象。我们紧紧需要一个 - result,它包含了来自用户实际的输入。

让我们增加脚本的行为:

import androidhelper
droid = androidhelper.Android()
respond = droid.dialogGetInput("Hello", "What is your name?")
print respond
message = 'Hello, %s!' % respond.result
droid.makeToast(message)

最后两行 (1)格式化消息 (2)用吐司消息的方式将这则消息显示给用户。 如果你不知道 % 是什么意思,那么请看看 Python 文档来了解格式化

酷!它工作了! ;)

现在,我准备在这里增加一点逻辑。 不妨想下:如果用户什么也不输入就点击 取消 按钮或者点击 将会发生什么?

你可以运行这个程序来检查在每种情况下 respond 的值将会是什么。

首先,我想要将用户输入文放到一个单独的变量中: name = respond.result。然后,我要检查它,看看它是否真正包含文本,它会被认为是一个名字,然后被用于打招呼。否则,另外一个消息将会出现。 将第五行 message = 'Hello, %s!' % respond.result 替换为下面的代码:

name = respond.result
if name:
    message = 'Hello, %s!' % name
else:
    message = "Hey! And you're not very polite, %Username%!"

如遇到假如-声明,使用编辑器地步操作栏目中的 <> 按钮(或者也可以使用空格/删除键)来缩紧/反缩紧行。 你可以通过读文档来了解Python 的锁进 以及假如-声明描述

首先,我们将用户的输入放到一个变量中 name。然后我们检查 name 是否不为空?在用户没有输入就点击 的情况下,返回的值就是空的字符串 ''。在 取消 按钮按下时,返回值就是 None。在假如-声明中,它们都被当假的来处理。因此,只有当 name 包含一些有意义的东西时,假如-声明才会执行显示问候 “Hello, ...!”。在用户输入为空时,用户将会看到 “Hey! And you're not very polite, %Username%!” 的信息。

Screenshot_2015-03-13-11-03-46.png
图 调用 SL4A 的对话框

好了,这个是整个程序:

import androidhelper
droid = androidhelper.Android()
respond = droid.dialogGetInput("Hello", "What is your name?")
print respond
name = respond.result
if name:
    message = 'Hello, %s!' % name
else:
    message = "Hey! And you're not very polite, %Username%!"
droid.makeToast(message)

其他

感谢 Dmych