Mobile.Python第四章.doc

上传人:re****.1 文档编号:542237472 上传时间:2022-12-17 格式:DOC 页数:20 大小:426.50KB
返回 下载 相关 举报
Mobile.Python第四章.doc_第1页
第1页 / 共20页
Mobile.Python第四章.doc_第2页
第2页 / 共20页
Mobile.Python第四章.doc_第3页
第3页 / 共20页
Mobile.Python第四章.doc_第4页
第4页 / 共20页
Mobile.Python第四章.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《Mobile.Python第四章.doc》由会员分享,可在线阅读,更多相关《Mobile.Python第四章.doc(20页珍藏版)》请在金锄头文库上搜索。

1、第四章 应用程序的构建与SMS收件箱PyS60使你简单的在S60平台上访问用户接构建口框架。感谢PyS60提供如此简单的处理方法,使得你可以学习怎样构建一个有标题栏、菜单和一些对话框的真正的应用程序,这只需要15行左右的代码。我们从怎样在Python中定义函数开始。在4.2部分中我们构建了一个应用程序,它呈现了一个典型的S60应用程序的全部结构。另外,这一部分介绍了PyS60中的一个最重要的概念,回调函数,它让你可以将任意的动作与各种事件进行绑定。当我向你展示怎样在应用程序中添加菜单时这个概念将会很有用。你或许已经迫不及待的想要开始做真正的应用程序了。在4.3部分,我将介绍怎样处理字符串。这个

2、将在4.4部分的访问SMS收件箱时会很有用。例如,我将构建一个功能齐全的应用程序,让你方便的搜索和排序你的SMS消息。最后,在4.5部分,我展示了一个SMS游戏服务,让你和你的朋友用文本消息玩刽子手游戏。4.1 函数在前面章节中你尝试的Python脚本是一行一行执行的。每一行代码执行一个动作,并且直到动作结束,才会转到下一行执行。对于从头到尾直接处理的任务,这是简单且健壮的方法。但是,如果我们想要用户来决定做什么,而不是让程序用相同的顺序执行相同的操作,那么我们的代码必须按不同的方式来组织。典型的,有图形用户界面的应用程序是一种情况,这使得用户通过UI元素的交互来执行不同的动作。当使用S60的

3、框架来构建用户界面时,执行进程不是按照代码一行一行来进行的。相反,用户或许通过按、说手机键盘的指定键来启动专门的任务。在这种情况下,你作为一名应用程序开发者的工作就是绑定指定任务到指定的按键事件上。当用户选择一个菜单项或者退出时,你的应用程序应该执行这个事件的相关任务。出于这个目的,你需要创造自己的函数。在例1中(在这里作为例9再一次出现),我们有三行代码按顺序执行。第二行触发了一个文本输入域,第三行触发了一个弹出通知框。例9:第一个PyS60程序import appuifwword = appuifw.query(uType your name, text)appuifw.note(uGre

4、etings from + str(word)我们可以定义一个函数,将那两行代码放到函数里。这是我们在例10中所做的,函数名为askword()。在函数内部,像以往一样执行进程是按顺序进行。函数只是一种给定名字,用来分隔和将代码组织成小块的方法例10:第一个函数import appuifwdef askword():word = appuifw.query(uType a word, text)appuifw.note(uThe word was: + str(word)任何时候我们想要执行这个任务,就是想要执行这两行代码,我们只需要调用函数askword():askword()askword

5、()在这种情况下,它两次询问一个字。在前一个章节中,你已经一直在调用函数了。例如:messaging.sms_send(+358., uGreetings from PyS60)appuifw.note(uI love MobileArt)这些是较早前例子的代码,调用的是messaging模块的sms_send函数和appuifw模块的note函数。Python语言课程:函数函数是将你的代码分割成具有独立功能的方法。函数有名字和函数体,并且可以被调用。函数具有可选的输入变量,叫做参数,同时它可以返回一个值。这里有一个例子:def add values(x, y):print Values ar

6、e, x, yreturn x + y关键词def开始函数的定义。关键词def后跟函数名,这里是add_values。括号里是函数的参数,用逗号分开。括号后是冒号。函数头后的缩进行组成了函数体,当函数被调用时将会一行接一行的执行。在Python中,缩进产生不同,所有确保函数体的代码行正确对齐。函数体和if子句以及循环语句一样要遵循同样的缩进风格。函数体或许会包含一个跟有值的return语句,它将返回给调用行。return语句是可选的。调用函数是函数名和其后小括号内的输入值:z = 3new sum = add values(z, 5)print Their sum is, new sum如果没

7、有给定输入值,在括号中就没有任何东西。返回值可以赋值给变量,如new sum = add values(z, 5),或者函数调用包含了更复杂的表达式。例如,上面例子中最后一行代码可以写作:print Their sum is, add values(z, 5)这种情况下,你不需要new_sum变量。正如你猜测的,例子产生如下输出:Value are 3 5Their sum is 8Python的口号是“包含电池”。意思是Python附带了广泛的预定义函数库,使得在完成许多复杂任务完全不费力。4.2 应用程序结构许多S60应用程序共享同样的用户界面布局。看看图4.1,几乎任何S60移动电话应用

8、程序,包括PyS60解释器,你将会注意到同样的用户界面结构。(b)(a)对话框appuifw.query()appuifw.note()etc.程序体 appuifw.app.body导航标签标题 appuifw.app.title图4.1 一个典型的用户界面(a)结构 (b)基于该结构的截图图4.1(a)显示了S60用户界面的结构。对比图4.1(b)中显示的典型用户界面,其为用S60UI框架构建,可以看出图表与实际情况的对应关系。在下面的叙述中,括号中的文本参照截图中的文本。在屏幕的顶部,你可以看到程序的标题(Tabs)。在标题的下方,可以看到一行导航标签(One 和Two)程序体中间的大块

9、区域可以用来放置一系列不同的UI元素(列表:red,green,blue,brown)。各种对话框,如弹出通知框,会出现在应用程序体,就像我们在第三章中看到的。在底部,可以看到两个需专用键激活的项目,是手机键盘的左右软键。如果没有对话框被激活,左软件将激活应用程序菜单(Options),右软键退出正在运行的应用程序(Exit)。如果有对话框显示,左软键对应于接受,右软键对应于取消。在PyS60中,你可以通过appuifw模块的app对象访问UI元素。在4.2部分谈论了更多有关对象的内容。更改UI元素是简单的,每一个元素(title,body,menu和exit_key_handler)是app

10、uifw.app对象的内部变量,你可以像别的变量那样给它们赋值。只需要记住用全名,如appuifw.app.title。无论什么时候你改变了这些变量中的任何一个,相关的UI元素就有相应的改变。第一个应用程序是使用appuifw模块提供的UI框架的最基本的应用程序。它不做任何有用的事情,但是它说明了一个可工作应用程序的最小需求。它将一直运行,直到用户选择退出应用程序,这与以前的例子恰恰相反,以前都是从头到尾执行。图4.2显示了它正在运行。图4.2 第一个应用程序这部分包含了两个与应用程序构建相关的语言课程,分别是回调函数和对象。如果你一次掌握不了也不用担心。随着后面越来越多的例子,它们将会越来越

11、清晰。例11:第一个应用程序import appuifw, e32def quit():print Exit key pressed!app_lock.signal()appuifw.app.exit_key_handler = quitappuifw.app.title = uFirst App!appuifw.note(uApplication is now running)app_lock = e32.Ao_lock()app_lock.wait()print Application exits在导入常见的appuifw模块的旁边,我们也需要一个叫e32的模块。这个模块提供了许多有用的低

12、级对象和塞班OS相关功能的函数。这里我们需要对象e32.Ao_lock()。我定义了一个新函数quit(),当用户按下退出键时,它用来处理应用程序的关闭事件。当我们有许多函数来完成各种任务的时候,我们需要告诉Python那个函数专门用来处理退出事件。这是通过将函数名赋值给特定变量appuifw.app.exit_key_handler来实现的。当用户按下退出键,该变量指向的函数将会被UI框架调用。在许多情况下,当一些事件发生时,Python期望你提供相关函数的函数名以供调用。这种函数就叫做回调函数。关于回调函数的语言课程将会讲清楚这个概念。Python语言课程:回调函数回调函数就是一个普通的函

13、数,和别的函数定义类似,但是它被用于特殊的目的。在回调函数和普通函数间没有什么技术上的不同。典型的,回调函数被PyS60的关联到特定事件的函数调用,例如当用户选择一个菜单项或决定退出应用程序。相对而言,原始的函数被你的应用程序代码调用是用来处理应用程序的特定任务。但是,有些情况下,回调函数有可能被你的应用程序直接调用。将一个函数和一个事件缔合叫做绑定。一些PyS60对象如Canvas和Inbox,都包含一个函数bind(),用来将一个函数绑定到相关对象的一些事件。无论什么时候,当PyS60 API文档或本书让你提供一个回调函数,都不要再函数名后加上小括号,因为回调函数只在事件发生后被调用。如果

14、你对C或C+比较熟悉的话,你或许注意到在这些语言中和函数指针的传递类似。在例11中,我们将应用程序名赋给标题变量appuifw.app.title。当程序运行时该字符串显示在屏幕的顶部。像本章开头谈论的那样,目前为止我们看到的PyS60程序是一行接一行执行的,当最后一行执行完后程序退出。但是,例11不会退出直到用户决定这么做。因此我们的应用程序在执行完最后一行后不应该退出,应该等待用户的动作。这可以用模块e32中的一个叫做Ao_lock对象来实现。该对象包含一个wait()函数,使得应用程序进入等待状态直到函数signal()明确的释放了这个锁。函数signal()必须在你想要终止应用程序的时

15、候调用,所以我们在函数quit内部调用它。要看看为什么在应用程序代码的底部建立一个锁很重要,从你的代码中省略app_lock.wait(),运行应用程序。一个对话框弹出来了,但是应用程序没有进入等待状态,它立即就结束了。当你运行例11时,你将会在屏幕的顶部看到“First App!”标题(见图4.2),和一个弹出对话框。直到你按下退出键(右软键)退出程序外什么都不会发生。之后,你将在PyS60控制台看到文本“Exit key pressed!”和“Application exits”。很难注意到应用程序正在运行。这是因为PyS60解释器是用同样的应用程序框架构建的,所以它看起来和任何别的PyS60应用程序一样。Python语言课程:对象对象将变量和函数组织起来进行操作。在许多情况下,函数和变量彼此之间相互关联,如果它们被分开处理显得很没有意义。对象在大型的复杂的应用程序中相当有用,如果大型应用程序没有被分成小的单元在实际中很难理解。Python已经为你做了许多这样的工作,所以你可以用Python已经准备好的对象愉快的编码

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号