[TOC]

### 你好,世界!
[image:34 align:right]
    图 使用编辑器编写代码

[image:35 align:right]
    图 点击运行运行


这样,[在你已经对 QPython 有点熟悉之后](/zh/doc/how-to-start/),让我们在 QPython 中创建第一个程序。明显地,它就是“你好、世界!”。

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

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

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

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

或者,通过 QPython 的[在线 QRCode 代码生成器](http://qpython.com/#qrcode),生成代码后,用 QPython 的“从 QRCode 中读取代码”功能将代码扫描进入手机。

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

### SL4A 库

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

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

*[了解关于 Python 库的更多](http://docs.python.org/2.7/library/intro.html) 和 [import 声明](http://docs.python.org/2.7/reference/simple_stmts.html#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 文档来[了解格式化](http://docs.python.org/2.7/tutorial/inputoutput.html?highlight=format%20operator#old-string-formatting) 。

酷!它工作了! ;)


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

你可以运行这个程序来检查在每种情况下 `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 的锁进](http://docs.python.org/2.7/tutorial/introduction.html?highlight=indent#first-steps-towards-programming) 以及[假如-声明描述](http://docs.python.org/2.7/tutorial/controlflow.html#if-statements)。*

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

[image:36 align:right]
    图 调用 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](http://onetimeblog.logdown.com/posts/2014/01/23/first-program-in-qpython)