标签:
Python中级教程索引:
第一课.数据类型 第十课.图形界面(下)
第二课.再讲数据类型 第十一课.剪刀石头布游戏与随机函数
第三课.文本处理与色彩(上) 第十二课.获取手机系统信息(上)
第三课.文本处理与色彩(下) 第十二课.获取手机系统信息(下)
第四课.文件操作 第十三课.选项卡(折叠界面)
第五课.while循环 第十四课.控制手机的电话功能
第六课.调用资源管理器 第十五课.控制手机的短信功能
第七课.线程的锁定与释放 第十六课.网页源码讲解
第八课.图形界面(上) 第十七课.post提交表单
第九课.图形界面(中) 第十八课.手机端反编译教程
1.数据类型-Py中级教程
同学们好,Py的中级教程开始了哦!大家继续加油,本篇我们来学习下数据类型
数据类型是学编程必须掌握的东西,虽然也是很简单,但是还是有很多朋友都会弄混,下面我就来介绍下Py里面的数据类型!
Python里面的数据类型和C、C++等语言有些差别,在C、C++语言中的数据类型是需要预定义的,而Py不用,Py是根据赋值的结果来自动识别数据类型的,这样做虽然方便使用,但同时也就降低的执行效率
数据类型有以下几种:
“数值型”
“浮点型”
“字符型”
“字符串型”
“布尔型”
在Py里面,这类数据类型是不用预先定义的,所以我在这里也就按照Py的方法来讲
数据类型和变量是息息相关的,通过赋值的结果来识别这个变量是一个什么样的类型,这个类型就是我们说的数据类型了,下面我们来解释下各个类型的介绍和用法!
数值型(int)(long)
数值型也就是数字,一种可计算的类型,数值型的变量是不能带有字母、小数点、中文或双引号的,Py里面默认的数值型是(int)型,比如:
a=20
b=-10
这就表示把20赋值给a,把-10赋值给b,因为这个值是一个单纯的数字,所以这个a和b就是数值型的变量了,是可以计算的,如:
print a+b
因为a和b都是可以计算的数值型,所以a+b输出的结果会是10
(long)型表示长整数,具有较大的储存空间,储存的数值位数要大很多,在赋值时的数字后面加上l或L表示这是一个数值(long)型,如:
a=20L
b=10
print a+b
数值型也有一些比较特殊的储存方法,如8进制,16进制,他们的用发比较简单,如8进制的储存方式是数值前加“0”,如:
a=010
print a
上面的输出结果是8,因为我们是使用8进制的方式存储的,逢8进制,所以010也就是8了
还有16进制的储存方式是数值前加上“0x”这里的x是小写字母x是不是乘号,如
a=0x10
print a
因为我们使用的是十六进制,所以这里的10就是16了!数值型的废话就先说到这里
浮点型(float)
浮点型也就是小数点,也是一种可计算的类型,和数值型不同的就是他可以带有小数点,可以和数值型的变量相计算,但是计算的结果会变成一个浮点型,其他和数值型一样
比如:
a=2.0
b=2
print a+b
赋值的时候使用小数点表示这个是一个浮点型的变量,浮点型的小数点只精确到5位,大家需注意这点!
上面例子输出的结果是4.0,也就是表明他和数值型计算以后,结果还是一个浮点型
字符型(char)
字符型在Py里面并没有得到很好的应用,在这里我大概讲一下,在C++语言里面,字符型是用两个单引号‘来表示的,字符型只能保存一个字符,如:"a","好","2"都是一个字符。
但是我发现在Python里面,单引号‘和双引号"是没有什么区别的,所以这个字符型大家了解一下就好
字符串型(string)
字符串型是编程里面最常用到的一种类型,字符串是由零个或多个字符组成的有限序列,它是编程语言中表示文本的数据类型,使用两个双引号"来表示,不可计算,可与其它字符串相加,但不可相减,按照从左到右的顺序排列,如:
a="aaa"
b="bbb"
c="11"
d="22"
print a+b+c+d
上面表示把字符串"aaa"赋值给a,
把字符串"bbb"赋值给b,
把字符串"11"赋值给c,
把字符串"22"赋值给d,
然后输出a+b+c+d的结果,他的结果是"aaabbb1122",因为字符串相加就是把两个字符串相结合,不能做计算的
在储存的时候,所有字符串后面都会自动加上‘\0‘代表字符串的结束
布尔型(bool)
Py里面好像不能使用布尔型,这里我也给大家简单讲讲就好了,布尔型我们前面也有讲了,就是真和假的关系,使用true和false两个值来表示,不可计算,不可相加减,只是简单的两个值,其它编程语言里面广泛应用于if语句,在Py里面,0就表示假(false),非0就表示真(true),非0就是指不是0的任何值,比如:
a=0
if a:print a
上面的结果是将0赋值给a,然后使用if语句,因为布尔型只是两个值,所以if里面的a不需要条件,a是“真”的时候就执行,a是“假”的时候就不执行,不信大家把上面的a改成1试一下就知道了
以上就是数据类型的介绍了,同学们先掌握一下,下一节我们将学习数据类型的其他使用方法!
---本节完---
2.再讲数据类型-Py中级教程
同学们好,因为数据类型的内容是在太多了,所以这里需要分两节来讲,大家要认真看下数据类型哦,这是很重要的
数据类型是可以转换的,有时候我们需要输出一个字符串和一个数值型的结果,比如:
a="ID:"
b=20101
print a+b
使用上面的输出是错误的,因为数值型和字符型是不能相加的,但是我们又需要把这两个变量结合,我们需要怎么做呢?
这时我们就需要转换类型了,转换类型的作用就是将两个不同变量中的其中一个转换成与另一个一样的类型,使之可以相加,
转换的语句有以下几种
int(变量)
long(变量)
str(变量)
float(变量)
转换方法都是相同的,这里我就只讲一个就好了
“int(变量)”表示将这个变量转换成一个数值型(int)的类型,返回转换后的结果,
字符串里面如果带有非数字的字符时是不能转换成数值型的,浮点型也是
如正确的转换方法:
a="234"
print int(a)
错误的转换方法是:
a="234s"
print int(a)
上面这个是错误的,如果你执行的话会报错,所以大家需注意这点
以上就是数据类型转换的方法了,下面我们在讲讲其他的一些方法
字符串是一个或多个的字符组合到一起形成的一个串,使用单引号或双引号括起来,Py语言里面,字符串必须保存在同一行,不然会报错
如果我们需要存多行的字符串时可以用左边三个单引号或双引号和右边三个单引号或双引号来把这个在不同行的字符串包括起来,比如:
a="""你好
我在下一行"""
print a
上面就是可以让这个字符串可以出现在多行中,方便我们的输入及查看,在这里顺便讲一下,为什么我经常使用双引号而论坛的人经常使用单引号,在C、C++、C#等语言中,单引号和双引号是有区别的,所以我经常使用双引号就是要养成一种良好的编程习惯,这样可以有效地减少程序的错误
其它方面上节我已经讲过了,在这里也就不重复了
在存储时,所有字符串后面都会自动加上字符‘\0‘,代表字符串的结束。这是编程语言自动加上的,我们看不到,也不用去理解,知道就行
字符转义:
对于一些特殊符号是无法输出的,因为有些符号是被当成编程语言的用法来使用的,比如单引号、双引号、反斜杠等,在编程里都叫做特殊符号,有时候我们想输出这类符号的时候,我们需要用到字符的转义了
字符的转义也比较简单,只要在特殊符号前面加入一个反斜杠“\”就可以了,比如:
a="\""
print a
上面就是输出一个双引号了,是不是很简单呢,我们把这种用法称为转义字符
转义字符还有些特别的用法,如:
\r 回车(CR)
\n 跳到下一行(换行)
\t 跳到下一个定位点(tab)
\\ 反斜杠
\0 空字符(NULL)
\x 十六进制的字符
\"双引号
\‘单引号
其实还有很多的,只是Py里面使用这些就够了,其他很多Py是用不了的,大家如果想知道其它的转义符可以自己搜索一下
还有一种类型是空类型(None)
在Python里面,如果一个变量被赋值了就表示需要在手机内存中开辟一个空间来保存这个变量
所以这里就有了这个空类型(None),这个(None)的作用就是说我声明了有这个变量,但是暂时不赋值给它,也就表示着还不知道他是一个什么类型,所以他不能做计算,也不能做字符串输出,这样就不会占用手机的内存了,但是赋值以后还是同样占用的,
它的用法是:
a=None
b=2
print a
a=b
print a+b
从上面可以看出,这个a需要赋值后才能正常使用
当我们使用变量时,如果这个变量已经不在需要它了,我们可以使用"del"来把它释放掉,这样可以增加我们的内存空间,增加我们的运行效率,比如:
a=22
b=a
del a
print b
上面的例子就是说把22赋值给a,然后在把a赋值给b,这时a已经不需要了,所以我们把a释放掉了,在输出b
注意:当a被释放掉以后是不能在使用的,也就是说这个a已经不存在,还想继续使用的话就需要重新赋值
数据类型看起来比较繁琐,很多同学都会因为数据类型没有注意好而导致的程序出错,所以我建议大家好好看看这个数据类型,自己多动手调试一下,自己懂得钻研才是重要的,自己钻研的东西是最深刻,也是运用得最好的,好像有点太罗嗦了,大家先看看吧!这一节就讲到这里
---本节完---
3.文本处理与色彩(上)-Py中级教程
同学们好,上一节的数据类型不知道大家掌握了多少呢,数据类型需要忙忙掌握,刚开始的学员也不用急着说现在就要搞懂,数据类型需要你在实践的过程中慢慢体会出它的好处来,现在你所需要理解的就是都有哪些类型,这些类型都有什么作用以及这些类型都是怎么赋值的
这一节我们来讲讲文本的处理跟色彩显示,其实我想和读写文本一起写的,但是考虑到学员们可能会把这些弄混乱,所以读写文本的留着下一节讲
相信很多同学学到这里应该已经比较了解软件的构造了,所以这里我就不在加入##来表示换行了,我直接空一行,这样就清晰多了
在学习之前先让大家了解下RGB颜色,RGB是什么呢?
编程的程序里面,不管是界面还是文本,色彩是由RGB颜色组成的,RGB分别表示着“红”“绿”“蓝”,就像早期的电视机一样,色彩是通过这几种颜色的深浅度不同来显示各种各样的图案及色彩!
R:代表红色
G:代表绿色
B:代表蓝色
程序里的RGB我都可以理解为红、绿、蓝
RGB颜色都有一个范围值,最小是0,最大是255,表示这个颜色的深浅度,255表示最深,0表示没有这个颜色
我们先来看看文本的色彩显示吧!
先来看代码:
import appuifw
def cn(x):return x.decode("utf-8")
appuifw.app.body=m=appuifw.Text()
m.color=(255,0,0)
m.add(cn("红色悠悠鱼o0\n"))
m.color=(0,255,0)
m.add(cn("绿色悠悠鱼o0\n"))
m.color=(0,0,255)
m.add(cn("蓝色悠悠鱼o0\n"))
m.color=(255,255,255)
m.add(cn("白色悠悠鱼o0\n"))
m.color=(0,0,0)
m.add(cn("黑色悠悠鱼o0\n"))
m.color=(100,130,100)
m.add(cn("这是什么颜色?\n"))
from e32 import Ao_lock
lock=Ao_lock()
appuifw.app.exit_key_handler=lock.signal
lock.wait()
---代码结束---
现在来讲解下函数的用法
m.color=(255,0,0)
这是一个色彩的设置函数,可以让你的程序界面显示色彩,m是我们定义的文本界面,m.color就是说将这个文本界面的显示的文字设置成什么颜色
它的参数有两种表示方法,一种是像上面这样的,叫十进制表示法,他的格式是:
color=(R,G,B)
还有另外一种叫十六进制表示法,是使用十六进制来进行赋值的,他的格式是:
color=0xffffff
“0x”上节有讲过了,表示这是一个16进制值的意思,如果我们要赋值到这个函数里又要怎么做呢?
这个十六进制的后面有6个f,从左到右数,每两个f表示着一种颜色,他的范围是00-ff之间,如我们需要显示蓝色的话可以这样赋值:
m.color=0x0000ff
续下一节 文本处理与色彩(下)
---本节完---
3.文本处理与色彩(下)-Py中级教程
现在我们再来学习下这个这个文本的处理
import appuifw
def cn(x):return x.decode("utf-8")
appuifw.app.body=m=appuifw.Text()
m.color=(255,0,0)
m.add(cn("悠悠鱼o0教程\n"))
m.style=appuifw.HIGHLIGHT_ROUNDED
m.color=(255,0,0)
m.add(cn("高亮圆体"))
m.style=appuifw.HIGHLIGHT_SHADOW
m.color=(255,0,0)
m.add(cn("高亮阴影\n"))
m.style=appuifw.HIGHLIGHT_STANDARD
m.color=(255,0,0)
m.add(cn("高亮标准\n"))
m.style=appuifw.STYLE_BOLD
m.color=(255,0,0)
m.add(cn("粗体!\n"))
m.style=appuifw.STYLE_ITALIC
m.color=(255,0,0)
m.add(cn("斜体!\n"))
m.style=appuifw.STYLE_STRIKETHROUGH
m.color=(255,0,0)
m.add(cn("删除线!\n"))
m.style=appuifw.STYLE_UNDERLINE
m.color=(255,0,0)
m.add(cn("下划线!\n"))
from e32 import Ao_lock
lock=Ao_lock()
appuifw.app.exit_key_handler=lock.signal
lock.wait()
---代码结束---
上面用到很多大写字母吧,大家记住或是保存起来,这些字母的意思我相信大家一看就明白了吧,我这里就不多说了,现在我们来创建一个小程序,这个小程序需要利用for循环来进行颜色的渐变!
m.get()是获得当前文本的内容,我们这里也需要使用它
在这里教大家使用循环来渐变颜色,因为不想加太多的代码进去,所以运行后要等渐变颜色结束了才能操作
代码:
import appuifw##
def cn(x):return x.decode("utf-8")##
appuifw.app.body=m=appuifw.Text()##
m.color=(255,0,0)##
m.style=appuifw.HIGHLIGHT_SHADOW##
m.add(cn("悠悠鱼o0教程\n"))##
def cs(r,g,b):##
****m.color=(r,g,b)##
****m.set(cn("悠悠鱼o0教程"))##
for R in range(255):##
****cs(R,0,0)##
for G in range(255):##
****cs(R,G,0)##
for B in range(255):##
****cs(R,G,B)##
from e32 import Ao_lock##
lock=Ao_lock()##
appuifw.app.exit_key_handler=lock.signal##
lock.wait()##
---代码结束---
##表示换行
上面的三个for循环里面,像第二个的循环里面cs(R,G,0) 为什么还用了个R呢,因为我们第一个循环完了,R的值是255,我在第二个循环偷下懒,用R代替了255
同学们学完了可以和其他的函数配合一下,做个带有选项呀,列表之类的软件出来
布置下作业,做一个自动机,打字机打出来的每个字颜色都有变化!提示:需要配合for和if语句
---本节完---
4.文件操作-Py中级教程
今天我们来学学文件的操作,如何写入文件,如何读取文件!
上次我所说的get()并没有用到,现在我们就来用一用
代码:
import appuifw
appuifw.app.body=m=appuifw.Text()
def cn(x):return x.decode("utf-8")
def en(x):return x.encode("utf-8")
def cg(c):appuifw.note(c+cn("成功"))
def sb(e):appuifw.note(e+cn("失败"))
def exit():
****if appuifw.query(cn("要退出吗?"),"query"):#提示选择
********appuifw.app.set_exit()
appuifw.app.title=cn("记事本")#程序标题
def save(path):
****try:
********f=open(path,"w")#打开文件
********txt=en(m.get())#获取内容并加密
********f.write(txt)#写入文件
********f.close()#关闭文件
********cg(cn("保存"))
****except:sb(cn("保存"))
def read(path):
****try:
********f=open(path,"r")
********txt=f.read().decode("utf-8")
********f.close()
********m.add(txt)
****except:sb(cn("读取"))
pat=cn("e:\\a.txt")
appuifw.app.menu=[(cn("保存"),lambda:save(pat)),(cn("读取"),lambda:read(pat)),(cn("退出"),exit)]
#下面是锁线程
from e32 import Ao_lock
lock=Ao_lock()
appuifw.app.exit_key_handler=lock.signal
lock.wait()
---代码结束---
上面的代码里我使用了还几个自定义函数,其实是为了方便操作和编写!
现在我们在讲讲文本的读取了
文本的读取需要用到open(),这是系统的函数,不需要调用模块的!
open()的作用是打开文件,和加载模块的意思差不多,我们要读写文件就需要先打开这个文件,
还有另外一个函数也是可以操作文件的,用法和open()一样,他就是file()了,这两个是同义词,作用一样的
open()和file()里面有两个参数,它的格式是
open(路径,打开方式,缓存大小)
路径:就是文件存放的路径,可以两种方式:
一种是完全的路径,如"e:\\a.txt"
一种是相同的路径,就是和源码同一个文件夹,但是在PED里面测试不了的,需要创建成程序以后才行,如"a.txt"
打开方式:就是文件用什么方式打开,也就是你想读取还是写入,还是可以读写
打开方式的方法有
"r": 只读(表示只能读取,如果没有这个文件就会提示错误)
"w": 只写(表示只能写入,如果文件不存在则创建)
"r+": 读写(表示可读可写,如果文件不存在则创建)
"a": 添加(表示向该文件添加内容)
缓存大小:还没有弄懂
现在简单讲讲文件的操作函数:
f=open(): 打开一个文件并赋值给f
f.write(): 向这个文件写入,如write(u"lexun")
f.read(): 读取这个文件的内容,没有参数,返回读取的内容
f.close(): 关闭这个文件,没有参数,我们文件不用了,关闭掉可增加内存,下次需要时在打开
现在在讲讲几个没有见过的至定义函数
自定义函数 en()
这是我用来加密的,因为Py的默认编码是U码,所以我们需要加密成UTF-8编码后在写进入!不然下次读取时或出错(因为我们使用utf-8编码读取的)
cg()和sb(): 是显示一条提示语句的,提示失败还是成功的,这个大家自己看下就好
appuifw.app.title=cn("记事本")
大家看到这个"记事本"都应该知道啦,这是设置软件的标题
m.get(): 返回当前文本里面的内容,因为程序默认是U码,所以我们需要写入文件时需要加密,m是文本框
如: m.get().encode("utf-8")
lambda :这是单行函数,如果要在菜单里传递参数就需要加入这个!(感谢星海兄的指点)
现在我们来看看上面这个源码的运行方式,这样大家会更好地理解
1.加载appuifw模块
2.定义文本框并赋值给m
3.定义cn()函数,功能是解码
4.定义en()函数,功能是加密
5.定义cg()函数,功能是提示成功
6.定义sb()函数,功能是提示失败
7.定义exit()函数,功能是退出
8.设置程序标题
9.定义save()函数,功能是获得文本框内容写入文件
10.定义read()函数,功能是读取文件并添加到文本框
11.将文件的路径赋值给pat
12.定义菜单
13-16.(锁线程,创建程序时可删除)
本节作业:
利用本节内容和结合以前所学的制作一个记事本程序,
最好是带有多一点功能的记事本程序,例如可设置文本的颜色,清楚屏幕功能,带有关于的提示等等...
大家发挥一下,编程就是要不断的锻炼思路
---本节完---
5.while循环--Py中级教程
同学们好,这一节我们来讲讲while循环,有些同学说我的教程讲得乱,其实我不这样认为,可能学习方法不同吧!有些人只想着我怎么不讲程序呢!我只是想让大家把基础掌握好,基础好了,等你做了程序也一定会比别人好的!
好了,不说那么多了,我们来学习while循环吧!
while循环与for循环是有区别的,各自有各自的优点!
while循环是计算机的一种基本循环模式。
以前说了,for是直到型循环,而while是当型循环,当满足条件时进入循环,不满足跳出。
(注意:是满足条件时才进入循环)
他的格式写法是:
while(条件):语句块
请看代码:
a=0
while(a<50):
****a=a+1
****print a
print"执行完成".decode("utf-8")
---代码结束---
如果你已经理解了for循环的话,while循环你也会很快理解的
这段代码的解释就是:
使用while循环,条件是a小于50,a每次加1后赋值给a,然后输出a,当a到达50的时候,循环就停止,因为条件不成立了,while循环停止以后就又往下执行了!输出从“utf-8”解码的“执行完成”。
---解释完--
可能有些同学还不理解什么是循环内和循环外,在这里我就拿输出a来说明一下吧!
像上面的代码我们是在循环里面输出a的,大家看到前面的缩进了吗!因为输出a这个语法是在循环里面执行的,所以它会每次都输出,
如果我们只想输出a的结果的话,我们把a放在循环外面,这样a就不会每次都输出了,
请看代码:
a=0
while(a<50):
****a=a+1
print a
--代码结束--
因为这一次的输出a没有放在循环里面(没有缩进),所以只输出1次a
a=a+1是在循环里面的,所以会被循环50次,也就是a加了50次
最原始的计算平方方法就是利用循环来计算的,比如我们要计算2的8次方,我们可以这样写:
请看代码:
a=0
b=2
while(a<8-1):
****b=b*2
****a+=1
****print b
print"平方的结果是:"+str(b)
--代码结束--
上面的8-1是因为第一次是2本身,所以计算8次方的时候我们只要计算7次!
其他的大家应该一看就明白了吧!
while还可以无限循环,我们只要让他的条件不成立就可以了,如果想要它停止的话,只要加入break就可以了,这个我们以前讲过了,这里就不重复这个了。
比如:while(1)
再教大家一个有关循环的语法,它就是continue了,
continue的作用是:
其作用为结束本次循环。即跳出循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。
请看代码:
a=0
while(1):
****a=a+1
****if(a==5):continue
****print a
****if(a==10):break
print"运行结束".decode("utf-8")
---代码结束---
大家运行一下,看看你能发现什么!嘻嘻
本节不搞作业了,大家先了解下这个while循环,然后想想它有什么好处!
---本节完---
6.调用资源管理器--Py中级教程
今天我们来学习学调用资源管理器!调用资源管理的好处就是可以让用户选择想要路径来进行操作。
代码:
import lite_fm,appuifw##
def cn(x):return x.decode("utf-8")##
import powlite_fm##
path=powlite_fm.manager().AskUser("e:\\",ext=[".mp3",".txt"])#限制显示的后缀##
if path==None:#未选任何文件时返回None##
****appuifw.note(cn("没选择路径!"),"error")##
else:##
****appuifw.note(cn("路径是")+path)##
---代码结束---
##表示换行,*表示空格
在上面的例子中我们可以看到,我们调用的时候是可以限制显示的后缀的,这样也就方便了我们编写,如果我们是做一个音乐播放器的话,我们就可以限制只显示那些能使用的音乐格式!
调用资源管理器时,如果你没有选择任何文件的话,系统就会返回一个None,这是表示空的意思,为了不让程序出错,所以我们要加入一个if语句去验证它!
调用资源管理器还有几个函数,分别是:
lite_fm.manager()
上面这个函数是没有参数的,直接使用,调用时也不会做任何的限制,可以显示全部的文件名
lite_fm.fileman.AskUser("")
这个函数有一个参数,这个参数表示调用资源管理器时显示的初始位置,比如我们上面的"",这是表示我们从根目录开始显示,如果我们把参数改成"e:\\"就表示我们从e盘开始显示
上面这些函数使用起来都是蛮简单的,主要是看你要怎么去配合它!
今天的作品是利用上面的调用资源器函数做一个记事本软件,这个软件的功能:
可以让用户打开某文件进行编辑,编辑以后还要能保存回去!
---本节完---
7.线程的锁定及释放-Py中级教程
今天我们在学习下线程的一些相关知识。
线程是指在程序运行过程中一个单独的进程任务,你可以同时创建多个线程在一程序里,它们可以并行运行,互不干扰.
就算其中某一线程出了问题也不会影响到其它进程.这样可以确保程序的分健壮性!
线程是CPU调度的最小单位,执行一个程序系统就创建了1个进程,但这个进程可以有多个线程。
以前我们经常使用到锁定线程,可能很多同学都不理解是干什么用的,这里我在说明一下。
因为PED是一个脚本的编辑器,我们编写代码后是通过PED来运行的,我们可以理解为“测试运行”,
PED在“测试运行”后(即执行全部代码以后)会关闭测试的程序,所以在测试是就需要加入锁定线程以及释放线程来方便我们测试代码
当线程被锁定以后,代码就不会再继续往下执行了,只有当你释放掉的时候才会继续往下执行。
锁定线程和释放线程需要调用e32模块,他们的函数是:
锁定线程:
Ao_lock().wait()
释放线程:
Ao_lock().signal()
好了,下面我们来看看实际应用中的代码吧!
代码:
import appuifw#1
def cn(x):return x.decode(‘utf-8‘)#2
appuifw.note(cn("线程即将锁定!"))#3
from e32 import Ao_lock#4
lock=Ao_lock()#5
def signal():lock.signal()#6
appuifw.app.exit_key_handler=signal#7
lock.wait()#8
appuifw.note(cn(‘线程已被释放!‘))#9
---代码结束---
上面我用数字和#注释表示了文本的每一行,从上面的代码中我们可以看出,这个程序执行到第8行的时候就会被锁定了,不会再往下执行,当点击右键的时候会调用释放线程的函数,这时程序才会执行第9行!
在这里和大家说说一些简化代码,在Py里面,很多函数的参数都是带有默认的,所以如果我们使用的是和默认一样的,我们都可以不用输入的,这样能方便很多时间,我在这里就给大家讲讲几个就好,其它的还是大家自己多试试会来得比较好!
第一个:
appuifw.note(u"lexun","info")
这个函数的的第二个参数默认是"info"
所以我们可以写成
appuifw.note(u"lexun")
效果和第一个是一样的,表示使用默认参数
第二个:
decode(‘utf-8‘)
这个函数大家很熟悉吧,因为我们用得很频繁的
这里的参数不是要讲默认,而是这里的"utf-8"可以简写,我原先不简写的原因就是想让大家记在脑海里,不然弄错了可不好。
我们可以简写为"utf8"或"u8",都是一样的!
---本节完---
8.图形界面(上)-Py中级教程
同学们好,上一节的课程大家掌握了吗?今天我们来学习下图形界面。
图形界面
如Windows是以图形界面方式操作的,因为你可以用鼠标来点击按钮来进行操作,很直观。而DOS就不具备GUI,所以他只能输入命令。
现在我们了解下Py的图形界面
--------
graphics-图象处理:
graphics 模块提供了Symbian系统中与图象处理有关的操作,包括打开、保存、旋转以及调整大小。
本模块同时支持前台和后台程序。
注意,S60 1st机型不支持本模块中的Image.open 和Image.inspect, 也不支持load, save, resize 和transpose。
--------
模块的函数:
screenshot()
这个函数没有参数;
截获屏幕快照,并将图象保存为Image格式。
例子如:
import graphics#1
graphics.screenshot().save(u"e:\\lexun.png")#2
---代码结束---
这样就可以将截图保存在e:\\lexun.png路径下了
save()是保存的意思。
如果想连续截图的话,加个循环就可以了,这个大家应该都会了吧!
--------
Image类静态方法:
Image.new((宽,高),模式)
根据给定大小和模式创建 Image _size 对象;
可以使用from来加载,像:
from graphics import Image
也可以直接加载graphics后在调用,像:
import graphics
graphics.Image.new((宽,高),模式)
需要先定义界面为图形面板才能显示图形;
(宽,高)
这是一个二元数组,需要加括号的,这个看例子就知道了;
模式
用于指定色彩模式。
可用的色彩模式有:
"1": 黑白(1位)
"L": 256色(8位)
"RGB12": 4096色(12位)
"RGB16": 65536色(16位)
"RGB": 16777216色(24位)
例子如:
import appuifw#1
from graphics import Image#2
appuifw.app.screen="full"#全屏#3
appuifw.app.body=gui=appuifw.Canvas()#4
img=Image.new((240,320),"RGB16")#5
gui.blit(img)#6
from e32 import Ao_lock#7
lock=Ao_lock()#8
appuifw.app.exit_key_handler=lock.signal#9
loc.wait()#10
---代码结束---
上面就是创建一个空白的对象了;
记得最后在将我们赋值的img加载到图形面板去;
加载函数是gui.blit(图形);
appuifw.app.screen="full"
这是定义窗口的样式,有效值"normal"(标准),"full"(全屏),"large"(大屏);
因为在PED里,最后要锁住线程,方便查看;
--------
显示图片
Image.open(路径)
第一个字母是大写字母i
在Image 对象中(RGB16模式)打开一张 JPEG 或 PNG 图片.filename 必须是完整路径。
注意:不支持S60 1st机型
在Image 对象中(RGB16模式)打开一张 JPEG 或 PNG 图片,路径必须是完整路径。
例子如:
import appuifw#1
import graphics#2
appuifw.app.screen="full"#3
appuifw.app.body=gui=appuifw.Canvas()#4
img=graphics.Image.open("e:\\lexun.png")
gui.blit(img)
from e32 import Ao_lock#7
lock=Ao_lock()#8
appuifw.app.exit_key_handler=lock.signal#9
lock.wait()#10
---代码结束---
e盘下要存有此文件哦!
---下节待续---
9.图形界面(中)-Py中级教程
同学们好,今天的内容主要是续上一节的,今天我们还是继续讲讲图形界面。
感谢Η♂ГОΛБ♀У同学对本篇教程提出的建议及修改
感谢巧⑥ㄨ№【天堂】同学对本篇教程提供扇形、弧形资料
感谢笕℡十╱兵★卫╲同学对本篇教程提供色彩10进制转化资料
几何图形:
图形面板除了使用图片来显示绚丽界面以外,就是使用几何图形来搭配出绚丽的界面了;
几何图形一般有圆、椭圆、三角形、矩形、扇形、线段、弧线等..
现在来看看几何图形的绘制
图形绘制之前要先将新建的图形对象赋值给一个变量,我们这里以img为例子,如:
img=Image.new((240,320))
上一节已经有讲过了,我第
二个参数使用了默认,所以不输入
--------
设置背景颜色
img.clear(色彩)
色彩:使用16进制来表示,如:(0xffffff)(也可以用10进制表示!将元组转化为10进制的公式是(r,g,b)
r*256*256 + g*256 + b
例(0,0,255)==255
(0,1,0)==256
(0,255,0)==65535
从上面可以看出,蓝色是最基本的单位了,257个蓝色就是一个绿色(从0开始的),依此类推。)
文本背景黑色的话可以使用0,如:
img.clear(0)
--------
画圆〔其实是画实心点,郁闷,之前忙,看教程时没注意去试……真正的圆可以看下面画椭圆的〕
img.point((x轴,y轴),色彩,width=宽度)##
(x轴,y轴):
即圆心坐标位置:用一个二元组来包括,输入的内容是横轴x和垂直y的坐标,
如:(50,25)
x、y轴是这样计算的,比如你的手机屏幕分辨率是240×320,就将宽度分为240格,高度分为320格。
上面的x轴50就是宽度第50格的位置,y轴25就是高度第25格的位置。
注:坐标轴原点是左上角,即(0,0)
色彩:见上。
宽度:圆〔点〕的直径,可以输入一个数值,比如:20
例子:
img.point((50,25),0xff00ff,width=20)##
--------
画三角形
img.polygon((x轴点1,y轴点1,x轴点2,y轴点2,x轴点3,y轴点3),色彩,width=填充宽度,fill=填充颜色)##
(x轴点1,y轴点1,x轴点2,y轴点2,x轴点3,y轴点3):
三角形三个顶点位置,用一个元组〔三角形三个顶点,从左到右,每两个坐标为一组〕来表示,如:
(40,50,40,300,200,170)
三个点的位置大家都自己试试,比较好理解
色彩:同上
边框宽度:三角形外边的填充宽度,用法同上
填充颜色:
三角形边框的色彩
例子如:
img.polygon((40,50,40,300,200,170),0x0000ff,width=5,fill=0xff0000)##
--------
画矩形
img.rectangle((x轴点1,y轴点1,x轴点2,y轴点2),色彩,width=填充宽度,fill=填充颜色)
用法:1、坐标要给出两组,如(10,20,50,60),从左向右,每两个为一组!分别表示矩形左上角坐标,矩形右下角坐标。2、可忽略填充颜色!大家自己试试,了解一下
--------
画线段
img.line((x1,y1,x2,y2),色彩,width=填充宽度)
前面我都用x和y来表示,大家应该能看出来吧,
用法:1、必需给出至少两组坐标,分别表示线段起点坐标,终点坐标!如果给出两组以上的坐标,就画折线!比如三组坐标,那么第二、第三组组成一条线,与第一、第二组组成的线构成折线
--------
画椭圆
img.ellipse((x1,y1,x2,y2),边框色彩,width=边框宽度,fill=填充颜色)
用法:1、必需给出两组坐标,分别表示椭圆外切矩形左上角坐标及右下角坐标!2、可忽略填充颜色!上面说了画圆其实就是这样,把坐标定义成一个正方形的即可
--------
画扇形:img.pieslice(坐标,开始方向角,结束方向角,边框颜色,边框粗细,填充颜色)
用法:1、必需给出两组坐标,这两个坐标其实是用来画出一个椭圆的,扇形就从这个椭圆中分割出来的!2、方向角,弧度制的,【额……给没学过的:方向角规定逆时针是正……顺时针是负……一周角360度就是2π……平角180度是π,逆时针90度就是π/2,顺时针90度就是-π/2,其实顺时针90度和逆时针270〔3π/2〕是重合的】也就是说,0是水平向右,π/2是垂直向上,π是水平向左,-π/2是垂直向下!选择方向角时就从-π/2〔顺时针90度〕到3π/2〔逆时针270度〕取就好了,其中π约等于3.14!2、填充颜色可忽略!
--------
画弧线:img.arc(坐标,开始方向角,结束方向角,弧线颜色,弧线粗细)
用法:1、坐标定义与画扇形的一样,弧线是从一个椭圆的边框中去截取的!
大家可以用上面的几何图形组合成很多的图案,组合完以后记得加载到图形面板去哦!加载方法上节也都讲了,不了解的可以回去再看看
另外再给大家补充一个显示文本的函数,这个函数可以在图形界面上显示文字!是比较常用的函数
画文本:img.text(文字放置的坐标,文字内容,颜色,所用字体)
获取本机字体:解释器里输入:
import appuifw
appuifw.available_fonts()即可
---本节完---
10.图形界面(下)-Py中级教程
这一节我们还是来继续学习图形界面,我们这一次主要讲一些图片的相关函数
我们现在就直接来了解一下一些图片相关的函数吧!
graphics.Image.open(‘路径‘)
这个上两节已经讲了,这个是加载图片!不懂的可以倒回去看看
我们还是将图片加载赋值给img,这样大家都比较好理解一些
w,h=img.size
w,h :是两个变量,我们这里表示宽和高;
img :是我们加载的那个图片;
size :是返回图片的宽和高;
这里的解释就是返回我们刚才打开的那张图片的宽和高,然后赋值给w和h
window=topwindow.TopWindow()
window :是一个变量,我们这里表示存储的窗体
topwindow :是一个程序窗体相关的模块
TopWindow() :这个是设置窗体为随意显示的模式(以下称:随显窗体),无参数
这里的解释就是将窗体设置为随显模式,然后复制给window
window.size=(x轴,y轴)
window :刚才我们设置的随显窗体
size :这个是设置随显窗体的大小,用一个元组来表示
window.background_color=色彩
background_color :设置窗体的背景颜色,色彩的用法以前都讲过了,如:0xff0000
window.corner_type=类型
corner_type :设置窗体的类型,有多种参数,大家自己手动试试都是些什么
参数如下:
"square"
"corner1"
"corner2"
"corner3"
"corner5"
示例: window.corner_type=‘square‘
window.shadow=值
shadow :设置窗体的阴影,设为0表示无阴影,设为非0的数则生成相应宽度的阴影
示例: window.shadow=3
window.position=(x轴,y轴)
position :窗体定位,即窗体的显示位置,用元组表示
示例: window.position=(20,50)
window.maximum_size=(宽,高)
maximum_size :设置窗口最大值,具体用法未知
window.visible=值
visible :设置窗体的可见度,只能设0或1
设置0表示不可见
设置1表示可见
示例: window.visible=1
window.show()
show() :显示窗体,无参数!
window.hide()
hide() :隐藏窗体,无参数
window.add_image(img,(x轴,y轴))
add_image :将我们加载的图片添加随显窗体中
可设置x,y轴的位置
也可以设置矩形的坐标位置
前者图象保持原始大小,后者调整到指定大小。
示例:
add_image(img, (10,20))
add_image(img, (10,20,20,30))
window.remove_image(img)
remove_image :从窗体移除图象
如果未设定可选项position(窗体定位),则移除窗体中的所有图象,否则移除指定的图象。
可以只限定左上角顶点,也可以限定矩形框(两个坐标点,左上角和右下角顶点)。
对于后者,只有完全吻合矩形框的图象才会被移除。
示例:
remove_image(img)
remove_image(img, (10,10))
remove_image(img, (10,10,20,20))
images
配置要插入到窗体中的图象。
包含了一组graphics.Image对象以及它们的位置。
对于位置的设定,可以只限定左上角顶点,也可以限定矩形框(左上角和右下角顶点)。
前者图象保持原始大小,后者自动调整到指定大小。参阅前面的add
示 例:
images = [(img1,(x1,y1)), (img2,(x1,y1,x2,y2)), (img3,(50,50,100,100))]
插入三个图象,其中 img1保持原始大小,而img2, img3、 将调整为指定的矩形框大小。
上面是一些图像和随显窗体的基本用法了,本文附带的文件是一个小例子,大家可以下载参考一下!
--本节完—
11.剪刀石头布游戏与随机函数
同学们好,这一节我们主要来讲讲随机数的使用和制作一个剪刀石头布的游戏!
什么是随机数呢?这一点我还真有点不好说,就是一个随意的数值,我相信大多数同学都是可以理解的!
在编程中,随机数的应用也是很广泛的,像颜色的随机变换,数值随机计算,特别是做游戏或做一些“智能”的东西!很大部分都需要用到随机数!
Py里面的随机数需要调用到random模块,我先和大家讲讲用法
random()
输出一个大于0小于1的随机小数,没有参数
例子:
print random.random()
uniform(a,b)
输出一个大于a小于b的随机小数
例子:
print random.uniform(1,10)
randint(a,b)
输出一个大于a小于b的随机整数
例子:
a,b=1,10
print random.randint(a,b)
choice(list)
输出列表中的随机一项
例子:
list=[2,1,5,9]
print random.choice(list)
也可使用中文列表,如:
list=[u"a",u"b",u"c",u"d"]
print random.choice(list)
shuffle(list)
打乱列表顺序
例子:
list=[0,1,2,3]
random.shuffle(list)
print list
上面的函数中可以看出,Py已经给我们提供了很多随机函数,刚开始的话我们就用系统自带的就好了
random()函数是Py随机函数的基础,其它函数都是根据这个来做的
如:随机整数
int(random.random()*1000000)
上面就是我们要学习的随机函数了,现在来实际应用一下这个随机函数!
我们来做一个小游戏“剪刀石头布”
代码开始:
import appuifw,random#1
def cn(x):return x.decode("utf-8")#2
appuifw.app.title=cn("剪刀石头布")
def exit():appuifw.app.set_exit()#3
def st():#4
****a=random.randint(0,3)#5
****if a==0:#6
********appuifw.note(cn("系统出石头\r\n你出石头\r\n平手"))#7
****elif a==1:#8
********appuifw.note(cn("系统出剪刀\r\n你出石头\r\n你赢了"))#9
****elif a==2:#10
********appuifw.note(cn("系统出布\r\n你出石头\r\n你输了"))#11
def jd():#12
****a=random.randint(0,3)#13
****if a==0:#14
********appuifw.note(cn("系统出石头\r\n你出剪刀\r\n你输了"))#15
****elif a==1:#16
********appuifw.note(cn("系统出剪刀\r\n你出剪刀\r\n平手"))#17
****elif a==2:#18
********appuifw.note(cn("系统出布\r\n你出剪刀\r\n你赢了"))#19
def bu():#20
****a=random.randint(0,3)#21
****if a==0:#22
********appuifw.note(cn("系统出石头\r\n你出布\r\n你赢了"))#23
****elif a==1:#24
********appuifw.note(cn("系统出剪刀\r\n你出布\r\n你输了"))#25
****elif a==2:#26
********appuifw.note(cn("系统出布\r\n你出布\r\n平手"))#27
def dz():#28
****index=lb.current()#29
****if(index==0):st()#30
****if(index==1):jd()#31
****if(index==2):bu()#32
****if(index==3):exit()#33
list=[cn("石头"),cn("剪刀"),cn("布"),cn("退出")]#34
appuifw.app.body=lb=appuifw.Listbox(list,dz)#35
from e32 import Ao_lock#36
lock=Ao_lock()#37
appuifw.app.exit_key_handler=lock.signal#38
lock.wait()#39
--代码结束--
本帖第一个文件为本游戏代码,改后缀.py
上面有用到elif,这是否则如果语句,是Py对else:if:的简写,方便我们书写的
如:
if:
else:if:
学到这里的朋友应该一看就能明白了!
上面这个例子是告诉大家一下这个游戏的做法,大家了解一下原理以后可以直接动手做个更完美的出来!
本节作业:
做一个剪刀石头布游戏的升级版;
需配合以前学习的内容进行编写;
使用图像来表示猜拳的结果,而不是提示语句;
使用运算符来进行计分,赢的加一分,输的减一分,平手不加分;
自己发挥点新创意,制造一些新奇玩法!
制作计分前可看下
变量的全局和局部问题
---本节完---
12.获取手机系统信息(上)-Py中级教
同学们好,今天我们来讲讲如何获取系统信息
系统信息是很重要的一个部分,当我们要验证某些功能的时候,
如:我们做的软件只能应用于v3系统的时候,我们就可以利用获取系统信息来进行验证了!
获取系统信息需要用到sysinfo模块
sysinfo 模块用于获取S60手机的系统信息。
active_profile()
获取当前使用的情景模式
返回英文表示的内容
内容有:
‘general‘ :标准
‘silent‘ :无声
‘meeting‘ :会议
‘outdoor‘ :户外
‘pager‘ :寻呼机
‘offline‘ :离线
‘drive‘ :驱动器
‘user<profile value>‘ :用户自设
示例:
print sysinfo.active_profile()#1
------------
battery()
获取当前电池的电量信息
S60 2nd (S60 2.1)之前的手机满格为7
FP1 S60 2nd
FP1之后的手机满格为100
电量耗尽则为0。对于模拟器,这个数值永远是0。
注 意:如果手机正在充电,那么就不能获得正确数值。
示例:
print sysinfo.battery()#1
------------
display _twips()
获取显示的宽高值,以缇(twip)为单位。
Twip(缇)
缇是屏幕显示系统的计量单位。1英寸等于1440缇,1厘米等于567缇。
这个函数比较少用,我们一般可以忽略
------------
display_pixels()
获取显示的宽高值,以象素为单位。
主要用于制作自适屏和缩放图片等
比较重要,用得地方也比较多
示例:
a,b=sysinfo.display_pixels()
print a
print b
------------
free_drivespace()
获取驱动器可用空间信息。
返回一个表单,如:
{u‘C:‘:100,u‘E:‘:100}
上面返回的是全部磁盘的信息
上面的100表示改磁盘的大小,以字节计算,所以我们显示时需要计算一下
可以使用列表的形式将我们需要的信息提取出来,提取时记得加冒号
示例:
a=sysinfo.free_drivespace()
b=a[‘C:‘]
c=b/1024
print str(c)+‘kb‘
------------
imei()
获取手机的IMEI码。
对于模拟器,永远是u‘000000000000000‘
示例:
print sysinfo.imei()
------------
max_ramdrive_size()
获取手机支持的内存上限
用法未知,请高手指教
---查看下节---
12.获取手机系统信息(下)-Py中级教程
---查看上节---
total_ram()
查看剩余缓存
示例:
a=sysinfo.total_ram()
print str(a/1024)+‘kb‘
------------
free_ram()
获取手机的剩余运存量。
示例可参考上面
------------
total_rom()
获取手机的固件存储量。
即Z盘的总大小
示例可参考上面
------------
ring_type()
获取当前响铃类型。
不支持S60 1st机型。
返回英文表示的内容
包括:
‘narmal‘ :连续响铃
‘ascending‘ :渐强
‘ring once‘ :响铃一次
‘beep‘ :蜂鸣
‘silent‘ :无声
示例:
print sysinfo.ring_type()
------------
os_version()
获取手机的系统版本信息
返回一个三元组:(主版本号,副版本号,附加版本号)
数值范围定义如下:
.主版本号:0到127
.副版本号:0到99
.附加版本号:0到32767
------------
signal_bars()
获取当前的网络信号强度。
用 0到7 表示:
0即无信号
7即信号最强
对于模拟器,这个数值永远是0。
示例:
print signal_bars()
------------
signal_dbm()
获取当前的网络信号强度
以dBm为单位;
对SDK 2.8以上版本有效;
对于模拟器,这个数值永远是0。
示例:
print signal_dbm()
------------
sw_version()
获取软件版本信息
如:u‘V 4.09.1 26-02-04 NHL-10 (c) NMP‘
对于模拟器,这个返回信息永远是.. u‘emulator‘
------------
unicode(‘‘)
这是一个系统函数,没有存在模块中的,是将数据通过unicode的编码方式来解码,具体看例子,和之前我们定义的cn(‘‘)是相同原理,只是这个是系统自带的
上面就是获取系统信息了,大家好好研究一下,用处很大的!提供一个小例子,方便大家尽快掌握,上面的lrc文件就是例子了!
大家自己尝试对例子进行注释,这样能理解得更深入
本节作业:
利用列表的形式制作一个手机信息查看器!
要求:
1.界面美观,带图
2.操作需方便简单
3.使用提示的形式,而不是像上面那样add()
4.结合以前所学知识自由发挥一些功能,
5.做完后发到论坛供大家参考
----本节完----
13.选项卡(折叠界面)-Py中级教程
同学们好,今天我们来讲讲折叠界面的使用!下面我们来开始学习吧!
折叠界面的创建主要使用了appuifw模块app方法中set_tabs()函数,写法也就是
appuifw.app.set_tabs(列表,事件)
set_tabs(列表,事件)
通俗的说法是“折叠界面”,官方的说法是“选项卡”
列表:术语是“选项卡项目”
事件:术语是“回调函数”
上面的说明只是让大家清楚这一点,避免大家看到以后都弄混乱了!
列表的说明以前都用过很多次了,这里也就不再做说明了
回调函数在以前的普通列表哪里也都用过了,就是提供一种事件的调用方法,我点击了什么,就调用什么出来
这里在讲讲缩进符的,我们原先讲的缩进符号都是用4个空格,想必大家也都很熟悉了!这里还要告诉大家一下,缩进符只是一种规范,你可以是1个空格,也可以是N个空格,只是你使用的过程中,其他的缩进方法都必须和这个统一,所以,我们之前用的4个空格是可以用1个空格来代替的!
之前主要是想大家能理解缩进的含义及使用方法!如果大家都熟悉了,那么我们也就可以更加简化地来使用了!下面我用两个空格来代替
代码开始:
import appuifw,e32,random#1
def cn(x):return x.decode("utf8")#2
def exit():#3
**appuifw.app.set_exit()#4
def lab1():#列表界面#5
**list=[cn("喜欢我"),cn("不喜欢我")]#6
**def sj():#7
****index=listbox.current()#8
****appuifw.note(cn("你选择")+list[index])#9
**appuifw.app.body=lb=appuifw.Listbox(list,sj)#10
def lab2():#文本界面#11
**appuifw.app.body=m=appuifw.Text()#12
**m.clear()#13
**m.set(cn("Py开发论坛欢迎您!\nhttp://py.t.lexun.com"))#14
def lab3():#画布界面#15
**from graphics import Image#16
**appuifw.app.body=gui=appuifw.Canvas()#17
**img=Image.new((240,320))#18
**R=random.randint(0,255)#取随机值#19
**G=random.randint(0,255)#20
**B=random.randint(0,255)#21
**img.clear((R,G,B))#22
**def redraw():#23
****gui.blit(img)#24
**while True:#25
****redraw()#通过循环语句使redraw函数不断执行#26
****e32.Ao_yield()#监控退出命令,使程序能退出#27
def eventr(x):#28
**if x==0:#29
****lab1()#30
**elif x==1:#31
****lab2()#32
**else:#33
****lab3()#34
xmlb=[cn("列表界面"),cn("文本界面"),cn("画布界面")]#35
appuifw.app.set_tabs(xmlb,eventr)#建立选项卡#36
appuifw.exit_key_handler=exit#37
e32.Ao_lock().wait()#38
---代码结束---
上面的文件就是圆代码,下载后改py
大家研究研究上面的程序,创建选项卡界面很好理解的!
主要看大家怎么配合使用!
本节作业:
创建一个带有选项卡的程序,三种选项卡需要应用三种不同的我们学过的界面
第一界面为图片界面,带有一个剪刀布游戏,并且需应用图像.
第二界面为图标列表界面,带有剪刀石头布游戏设置功能,设置难度,设置方向,设置图像大小,设置文件提示颜色等功能.
第三界面为文本界面,带有剪刀石头布的结果提示功能!
本节作业会有点难度,大家要好好做哦
---本节完---
14.操作手机的电话服务--Py中级教程
今天我们来讲讲如何使用程序来操作手机上的电话功能和信息功能!
需要用到的模块如下:
电话:telephone
信息:messaging
现在我们来学习下这些模块都是怎么使用的
模块:telephone
这是电话服务模块;
本模块提供支持电话服务的API;
显然,用户主动挂断电话时就会改变当前通话的状态;
另外,模拟器中没有通话功能,所以该模块无效。
------------
telephone模块中含有下列函数:
dial(号码)
呼叫参数中指定的号码
例如: u‘+860755123456‘;
+ 是国际前缀;
86是国家代码;
0755是网络代码(俗称‘区号‘);
123456是对方的号码;
我们在国内使用时可以直接拨打的,如u‘10086‘;
注意下列问题:
如果通话正在进行中而调用了dial,则会将该通话挂起并连接新通话。
如果多次调用dial,其中有一个呼叫成功的情况下,其他呼叫不再连接。
示例:
telephone.dial("10086")
------------
hang_up()
将dial引发的呼叫挂断,即挂机
如果通话已经结束而调用hang_up()
将引起SymbianError:KErrNotReady错误
示例:
telephone.hang_up()
------------
注意:以下函数和数据项只支持S603rd以上机型
------------
incoming_call()
监听来电
有新来电时马上调用answer来应答
必须有incoming_call的激活
否则answer无效
示例:
telephone.incoming_call()
------------
answer()
应答来电
------------
call_state(callable)
通话状态改变时回调callable.返回一个二元组
前项是新状态,后项是来电号码。
相关状态以常量形式定义在telephone模块中。
可用的数据项(状态信息)如下:
EStatusUnknown :未知状态
EStatusIdle :空闲状态
EStatusDialling :呼叫状态
EStatusRinging :响铃状态
EStatusAnswering :应答状态
EStatusConnecting :正在连接状态
EStatusConnected :已连接状态
EStatusReconnectPending :临时性信号丢失,可能引起重拨
EStatusDisconnecting :断开连接状态
EStatusHold :挂起状态
EStatusTransferring :呼叫转移状态
EStatusTransferAlerting :呼叫转移正在进行远程通信
------------
现在我们来做一个自动拨打
示例源码:
import telephone,e32
telephone.dial("10086")#拨打10086
e32.ao_sleep(5)#延时5秒
telephone.hang_up()#挂机
---代码结束---
上面就是一个呼叫的简单例子了
拨打10086,然后过5秒就自动挂断
现在我们再来做一个来电信息查看
import telephone
def cn(x):return x.decode(‘utf8‘)
def call(z):
print z
telephone.call_state(call)
---代码结束---
这个只是简单的查看,给大家看看它的用法而已,提供一个自动接听电话的脚本,大家可以自己看看
自动接听脚本
----下节待续----
15.控制手机的短信功能-Py中级教程
上节我们已经讲了电话功能的使用,我们这一节来控制一下手机上的信息功能!
模块:messaging
这是信息服务模块
本模块提供支持信息服务的API。
通常包含如下函数:
sms_send(号码,内容)
发送指定内容到指定号码,不能带有中文
示例:
messaging.sms_send(‘10086‘,‘1‘)
------------
sms_send(号码,内容,[encoding=文字编码,callback=None])
对内容指定文字编码以后发送给指定号码
文字编码类型有:
‘7bit‘,‘8bit‘,‘UCS2‘
可选参数callback以发送状态作为回调参量。
相关状态信息定义在messaging模块中。
注意,当先前的调用正在进行发送请求时,调用第二个发送将引起RuntimeError错误;
callback缺省情况下,sms_send函数在被调用之后挂起,直到所发信息在队列中删除或发送失败。..
示例:
messaging.sms_send(‘10086‘,‘你好‘.decode("utf-8"),encoding=‘UCS2‘)
------------
mmssend(号码,内容,attachment=None)
注意:本函数只支持S603rd以上机型
把指定内容向指定号码的手机发送MMS彩信,可选参数attachment是多媒体附件(比如图片)的完整路径。
示例:
mmssend(‘13800138000‘,‘你好‘.decode(‘utf8‘),attachment=‘e:\\lexun.jpg‘)
------------
以下数据项是messaging模块中可用的SMS发送状态信息:
ECreated
EMovedToOutBox
EScheduledForSend
ESent :SMS短信发送成功
EDeleted :SMS短信已从发件箱中删除sms_send操作将重新规划剩余可能的SMS短信发送
EScheduleFailed
ESendFailed :在SMS子系统多次尝试发送未果时返回这个失败状态信息。
sms_send操作将重新规划剩余可能的SMS短信发送
ENoServiceCentre :在S60 3.x模拟器中返回的状态信息
在模拟器中它表明:sms_send操作将重新规划剩余可能的SMS短信发送
EFatalServerError :在无网络连接时尝试发送SMS短信将引发这个状态信息。
通常会向用户显示“信息发送失败”警告。
在离线模式或无网络连接情况下尝试发送,信息将进入发送等待队列,直到连上网络之后开始发送。
当前网络情况可用sysinfo.activeprofile()和sysinfo.signalbars()查询。
以下代码就是sms_send状态信息处理示例:
import appuifw,messaging
def cn(x):return x.decode("utf8")
def HuiDiao(state):
**if state==messaging.ESent:
****appuifw.note(cn(‘信息已发送‘))
**if state==messaging.ESendFailed:
****appuifw.note(cn(‘发送出错‘))
messaging.sms_send("10086","1",‘7bit‘,HuiDiao)
---代码结束---
上面就是发送信息的基本例子了!做这方面的软件比较特殊,就不给大家出作业了,大家自己看看自己学了以后能做个什么样的出来!
---本节完---
16.网页源码讲解
先来讲解一下网页源码,以下为乐讯空间内改昵称的部分源码。有些因不必要,而且为了简洁,所以去掉了。
本文适合新手看,老鸟勿笑。
<card id="main"title="修改昵称">
<p>昵称:<input name="nicka71a7ee584b6"type="text"maxlength="10"value="|P|-杜冷丁"#这边有值的话就说明是默认的。emptyok="true"/>
#以上可以看得出是输入框吧!其中‘input name=’后面的可以理解为输入框中内容存放的变量。这个变量可不是最终提交的变量。(我这样理解的)
<anchor>确定<go href="editnick.aspx?a=726336346&cd=103&lxt=串号"
#在这边打断一下,这边就是当你点击确认之后会跳转的网址,也就是输入框中内容的提交地址。 method="post">
#这里就是说明点击确定以后会post(提交内容到服务器)
<postfield name="nick"value="(nicka71a7ee584b6)"/>
#这里的“nick”才是最终要提交到服务器的变量,值就是“value”后面的值,这个值可以直接定义,也可以用变量。(在这里,用的是变量,与上文输入框那里的所对应。)
</go></anchor><a href="editdata.aspx?cd=103&lxt=串号">取消</a>
源码先讲解到这里,等等继续写完post,因为学post要懂一点点网页源码知识。写的不好。多多包涵!post提交表单正文
---本节完---
17.post提交表单
一点也不懂网页源码的点这里,懂的跳过这次,我来说下py中的post,看源码吧,源码是我从网上找的,加上自己理解的注释,算是原创的了吧,希望你看得懂。
import appuifw,httplib
def en(x):return x.decode("u8")
appuifw.app.body=m=appuifw.Text()
url="提交表单的地址"#这个地址可以在网页源码里找到,据我所知没例外的。
heads={"Accept":"text/plain","Content-Type":"application/x-www-form-urlencoded"}
#这个地方是http头文件(具体什么东西我不知道。不管,照抄,照抄。)
data="content=中文.英文.数字和符号"
#这里是要提交的表单,里面的变量是之前讲网页源码时提到的。如果有多个变量就用符号"&"相连
比如:如果有<postfield name="nick"那么要把nick在表单里写上。有多少写多少,顺序颠倒好像没关系。
conn=httplib.HTTPConnection(‘10.0.0.172:80‘)
conn.request(‘POST‘,url,data,heads)#这里就是在提交了。看清格式。
res=conn.getresponse()
data=res.read().decode("u8")
m.set(data)
好了,post也讲完了,好好巩固吧,很简单的,学会了又很实用,记住,千万别用他做坏事。有问题欢迎问我。
---本节完---
18.手机端反编译教程。
前言,很多新手学完教程之后就不知道怎么提高技术了,其实多看看别人的源码可以很容易理解某个模块怎么怎么用,但是大部分都编译过了,编译了就不能直接查看脚本了,所以现在来学学反编译吧.
首先我们来了解下,什么是编译与反编译.
别人发出的py文件如果是没经过编译加密的话,我们用智能解包一解包就可以看见他写的py源码.
有些人为了自己的软件不被修改,发布,抄袭,所以就编译源码.(据说编译文件后打包软件运行会稳定些。)
既然有编译,那就一定有反编译啦!最出名的解密模块是decompile这个模块,是个俄罗斯高手写的,但是后面加密高手越来越多,导致decompile模块悲剧了.
然后e乐网的“中文名好听”做出了decompile2这个模块,又导致加密的脚本悲剧了...
decompile2这个模块真的蛮好用的,反编100多k脚本几分钟就搞定了!,呵呵,内存也耗的很小!
介绍也介绍完了,现在学下decompile2这个模块的用法吧.由于本人也是新手,写的可能会不好,见谅!
首先放入decompile2模块到模块包,放入了之后就可以使用decompile2反编译模块了。
上面的文件有decompile2模块&用法&实例!后缀zip.新手写的不好,见谅!
编译完成后,源码的中文会变另外的格式,可以用源码还原中文!当然也可以用转换成中文一句一句输入...
注:反编译文件已上传,自己写的,写的很简单,我把引入模块放到了定义函数的部分,所以缺少模块也可以打得开,但是用反编译功能不会有反映,需要decompile2,fy_manager这两个模块,decompile2模块我上传了,另外个模块你随便搜下都有!
---本节完---
标签:
原文地址:http://www.cnblogs.com/mhxy13867806343/p/4058477.html