Py教程

1.1.1------------创建PY程序---------:

在这里我们就先要用到Yedit文本编辑了,其实我们也可以用Ped,(现在有PY编程易可用,更便捷)但我在编写中文代码的时候都显示口口,所以我一直都用Yedit文本编辑器。打开Yedit文本编辑器,选项-工具-设置,然后把打开文件和保存文件的编码都设为JAVA UTF-8,这就完成了Yedit文本编辑器的设置!然后就让我们用这个Yedit文本编辑器来编写一个最简单的软件吧!
第一行:import appuifw
第二行:appuifw.note(u'https://www.360docs.net/doc/9d10847785.html,','info')
注意:每一行前不能有空格(以后该缩进时再缩进),字母大小写必须准确无误,PY平台对这个是非常敏感的。然后保存,保存命名时格式为**.py其中**应为英文字母,后缀名为.py保存好后就打开PY软件创建器,选项-创建py程序,选中你刚才用文本编辑器写的那个以.py为后缀的文件,接下来的就按照软件里面的说明去操作,在命名时记得用英文,中文会使创建PY软件失败!创建完成后去功能表里看看,是不是多了个新的图标?点击进入看一下效果,如果效果如截图所示,那么恭喜你,你的第一个最简单的程序编写成功!如果打不开或者没有反应,检查一下你的操作有没有按照我所说的那样或者我提到的注意事项你注意到了没有!解释一下这段简单的代码。import appuifw解说:import翻译为英文是引入的意思,import appuifw就是引入appuifw的意思,引入了appuifw这个模块,我们就可以利用它来做一些关于文本处理方面的事情!
appuifw.note(u'https://www.360docs.net/doc/9d10847785.html,','info')
解说:appuifw.note表示引用了appuifw这个模块中的note函数,至于函数,在这里还不懂吧?没关系,以为我会讲到的,现在你就先照着这样做吧!再看括号里的(u'https://www.360docs.net/doc/9d10847785.html,','info')在这里(上传教程时系统可能会将引号变成豆号,在这里提示一下大家,编程时单、双引号都可以),
u'https://www.360docs.net/doc/9d10847785.html,'告诉了系统要处理的文本内容,格式是u'*',*为只能为英文或数字!(为什么?请继续往下看吧!)那怎样处理呢?再看'info',他是英文inform(通知,告示,在这里是提示的意思)的缩写,英文好的机友应该很容易就记住了,这就告诉了系统应该把文本以提示的方式呈现给用户!那么为什么不把u'https://www.360docs.net/doc/9d10847785.html,'换成u'哇麦'呢?那是因为我们还没有定义中文的编码方式,换成中文系统将无法显示!至于怎样显示中文呢?在下一节我将继续告诉大家!
1.1.2-------PY编程学习之文本处理-------:

上一节教大家制作了一个简单的程序,怎样,你学会了吗?如果有什么问题的话可以给我留言,但我不一定会很快就回复,毕竟我也有我自己的事要做嘛!另外,我的表达能力有限,有不到之处还请

大家指出或更正,敬请谅解!好了,继续我们的学习吧!上一节我们只是做了一个简单的软件,一启动软件就会弹出如https://www.360docs.net/doc/9d10847785.html,的提示!那么怎样使系统能够显示中文的呢?好,看代码!
#代码开始#
import appuifw
def m(x):return x.decode('utf-8')
appuifw.note(m('哇麦论坛欢迎你!'),'info')
#代码结束#
对照之前所讲的,我在里面添加了def m(x):return x.decode('utf-8')这段代码,def是define的缩写,翻译为中文就是“定义”的意思,很明显,这段代码定义了中文的编码方式为utf-8并以此返回给用户,这样我们就可以在软件中显示出“哇麦”的中文字样了,当然,你在这里可以写上任意你喜欢的中文了!更改看一下效果吧!如果想添加更多内容并换行,那就在“哇麦”后面加\n(\n可以使文本换行),然后再添加你想加入的内容,如m('哇麦论坛欢迎你!\https://www.360docs.net/doc/9d10847785.html,') ,效果如截图所示!当然,我们不会满足于只让系统做这么简单的工作,把代码中的info 分别换成error、conf 试一下有什么不同!记得,写入这些代码后要记得先保存,别到时出错后就提问题!error翻译为中文是“错误”的意思,这个让系统提示用户出错了,conf是confirm(证实,在这里是完成的意思)的缩写,这个就告诉系统把文本以完成的形式呈现给用户!以上那些都是以文本的方式呈现给用户,那么可不可以让我们输入文本呢?当然可以,看代码:
import appuifw
def m(x):return x.decode('utf-8')
appuifw.query(m('请输入:'),'text')
#代码结束#
解说:在这里,我们又调用了appuifw这个模块的query函数,query翻译为中文是“询问”的意思,在这里就使得系统询问用户,那么询问什么呢?看后面的'text', text翻译为中文是“输入文本”的意思,概括起来,系统就询问用户输入文本,效果如截图!同样,我们可以将text分别改为date 、number 试一下效果吧!详细的解说在这里就不解说了,看了效果你就会明白其作用!截图在最后!好了,这一节就讲那么多,继续跟贴吧!
1.1.3------文本处理(二)-------

上一节我们学着编写了一些文本处理的简单软件!其中都用到了appuifw这个模块!利用这个模块我们还能做很多的事情!一步一步来吧!我们可以编写一个简单的编辑文本的工具,就是在上面打字的小软件,看代码!
#代码开始#
import appuifw
def m(x):return x.decode('utf-8')
appuifw.app.body=appuifw.Text(m('哇麦论坛欢迎你!\https://www.360docs.net/doc/9d10847785.html,'))
#代码结束#
解说:在这里,前两行的内容之前已经解说,让我们看最后一行!appuifw.app.body这句表示:文本的主体呈现形式。那么文本的主体呈现形式是什么呢?appuifw.Text(m('哇麦论坛欢迎你!\https://www.360docs.net/doc/9d10847785.html,'))就是这

个主体呈现形式,也就是以文本编辑的方式呈现给用户,中间用等号(=)把两者连接起来!其中m('哇麦论坛欢迎你!\https://www.360docs.net/doc/9d10847785.html,')为预设的文本内容,也就是我们一打开这个软件就会看到的字!有时在声明一些软件时,可能整个屏幕都是预设内容!当然,如果你不想预设任何内容,那什么也不用写入,也就是写成appuifw.app.body=appuifw.Text()如果我们想改变文本编辑的屏幕为全屏,那就再另起一行,写入appuifw.app.screen='full',其中screen译成中文是“屏幕”的意思,如果换成大屏,就把full(满的)改为large(大的),换成标准屏幕就改为normal(标准的),在不写入该段代码时,系统默认为normal(标准屏幕)!如果想给软件定一个中文标题,也就是在标准屏幕下运行软件时屏幕上方的那个标题,那就再另起一行,写入:appuifw.app.title=m('标题内容'),其中title译成中文是“标题”的意思!好了,今天就讲这么多,麦友也许觉得进度有点慢,确实,写详细点好让学习者更容易掌握,能让大家学到东西才是我的目的!好了,晚了,睡觉去!
1.1.4------定义函数与添加菜单------

这一节的内容是教大家如何定义函数和添加菜单。谈到函数,大家自然会想到数学上的函数,但在编程中的函数和数学中的函数是不同的,那为什么要叫做函数呢?这是别人早在之前就定义好的,我们姑且只能这样叫!好了,废话不多说,开始吧!看代码(代码中的+号代表一个空格,#号之后的内容是注释,以#号开头的内容系统会忽略,对程序代码不产生任何影响!)!
#代码开始#
import appuifw#引入模块
def m(x):returnx.decode('utf-8')#定义中文编码方式
appuifw.app.body=appuifw.Text()#给出程序显示主体
def a():#开始定义函数
+appuifw.note(m('欢迎加入哇麦论坛!'),'info')#这是函数一的主块
def b():
+appuifw. query (m('你支持我吗?'),' query ')
appuifw.app.menu=[(m('菜单一'), a),(m('菜单二'),b) ]#添加菜单选项
#代码结束#
讲解:其实我们在之前就已经定义过函数,就是那段定义中文编码方式的代码,但在下面我们的定义方式似乎有些不同!我们在定义一个函数的时候,习惯上的格式是先:def ***(): 其中***代表你定义的函数名!然后另起一行再写上所定义函数的主块内容!讲到这里,看回之前的代码,我空了一个格,这就要向大家提出缩进这个概念了!怎么说呢?还是以两个例子来解释一下吧!
例一:
import appuifw
appuifw.app.body=appuifw.Text()
def tex():
+appuifw.note(u'https://www.360docs.net/doc/9d10847785.html,','info')
+ appuifw. query (u'https://www.360docs.net/doc/9d10847785.html,','query')
例二:
import appuifw
appuifw.app.body=appuifw.Text()
def tex():
+appuifw.note(u'https://www.360docs.net/doc/9d10847785.html,','info')
appuifw. query (u'https://www.360docs.net/doc/9d10847785.html,','query')

在例二里,我去掉了最后一句的空格!那会有什么不同呢?例一的代码运行之后就是一个让你输入文本的对话框,而例二运行之后先是出现一个输入文本的对话框,然后又弹出一个询问窗口!(效果图在页尾)这就是他们的不同之处,例一的最后一句从属于所定义的函数tex(),而例二中的最后一句并不属于函数tex(),也就是他不属于函数所定义的内容!如果把这些代码句子划分等级,例二的最后一句属于一级,那么例一的最后一句就属于二级!通过这个例子不知道能不能让大家理解缩进这个概念,你可以去查阅相关的内容,但对于初学者来说那些专业术语是很那理解的!好了,了解了缩进的相关内容之后,让我们回到最初的代码例子,看最后一句:appuifw.app.menu=[(m('菜单一'),a),(m('菜单二'),b)],这个是创建菜单的代码,其格式是:appuifw.app.menu=[(菜单名一,动作一),(菜单名二,动作二)] ,菜单名你自己起,而动作就是你之前所定义的函数,例子里定义了两个,当你选择相关的动作时,系统就会执行相关的任务,这就要看你在之前的函数里定义了什么任务内容!
1.15-------二级菜单与文本处理补充---------
进入话题之前啰嗦一下吧,建议麦友下载相应的示例代码并结合教程去学习,那样对学习编程会大有帮助,我表达能力有限,有时讲得又不是很确切,麦友又理解不了,结合示例代码就会理解得快一点。我初学的时候靠的就是多看代码并且改动里面的参数从而知道他们的用法!又说了不少,进入话题吧!上一节我们学习了怎样定义函数,定义的函数多了,自然我们就可以在菜单里添加更多的选项,但如果函数太多,在一个一级菜单里排得满满的,这时我们就应当创建二级菜单,这样既美观又方便操作!但目前我们学到的模块使用方法还不多,不会有太多的菜单选项,在这里,我顺便向大家介绍更多的关于文本处理的方法,让我们看代码吧(可能有点长,但其实都是同一个模板,请麦友耐心地看吧,同样地,我以+代表一个空格)!

#代码开始#
import appuifw
def m(x):return x.decode('utf-8')
appuifw.app.body=t=appuifw.Text(m('哇麦欢迎你'))
def a():
+appuifw.note(m('哇麦论坛欢迎你!'),'info')
def b():
+appuifw.query(m('这是询问功能'),'query')
def c():
+appuifw.query(m('这是提示文本输入功能'),'text')
def d():
+appuifw.query(m('这是输入日期功能'),'date')
def e():
+appuifw.query(m('这里只能输入数字哦!'),'number')
def f():
+appuifw.query(m('这个是密码输入'),'code')
def g():
+t.add(m('这样可以添加文字哦'))
def h():
+t.set(m(''))
appuifw.app.menu=[(m('一级菜单'),((m('基本提示'),a),(m('询问'),b),(m('提

示输入'),c),(m('输入日期'),d),(m('输入数字'),e),(m('输入密码'),f),(m('添加文字'),g),(m('清除屏幕'),h)))]
#代码结束#
讲解:代码看起来很长,但其实都是在反复定义新函数而已,从而菜单的内容才会丰富!例子里面的函数功能在例子里本来就有解释,大家稍微研究一下就会知道怎么用了,所以在这里就不再多说咯,请谅解!呵呵!如果真不懂,就给我留言吧!我们还是来看一下二级菜单的创建吧!括号很多,看起来有点繁琐是吗?记住格式就好了,格式是:appuifw.app.menu=[(一级菜单,((二级菜单一,动作一),(二级菜单二,动作二)))]在这里需要细心,因为括号多,容易出错!在这里补充说明一下,并不是所有定义到的函数都要列入菜单选项里!还有就是,上一节里我们讲到的关于缩进的概念,至于缩进所空的格数,个人有个人的风格,就如我的代码示例里,我就只空了一个格,有些人喜欢空四格,个人觉得那样好麻烦,因为在文本编辑器里要空一个格不能说是很轻松的,那样很浪费时间,而编程应该讲求效率!最大的缺点是,如果函数里面又有需要定义的函数,那么那个函数的主块就要空4*2=8格了,想想那样会多么麻烦啊!
1.1.6----------文字效果与处理---------
大家平时看到的文字也都太单调了吧!黑色,方正,除非你换字库!今天就教大家处理文字的效果吧,包括字体处理和颜色处理。好了,看代码!
#代码开始#
import appuifw
from graphics import *
def m(x):return x.decode('utf-8')
appuifw.app.body=a=b=c=d=e=f=appuifw.Text()
a.color=0x0000ff
a.style=appuifw.HIGHLIGHT_SHADOW
a.add(m('哇麦论坛欢迎你!'))
def a1():
+b.style=appuifw.STYLE_BOLD#粗体
+b.add(m('\n哇麦论坛欢迎你!'))
def a2():
+c.style=appuifw.HIGHLIGHT_ROUNDED#抹黑字体
+c.add(m('\n随缘情恋教编程'))
def a3():
+d.style=appuifw.STYLE_UNDERLINE#下划线
+d.add(m('\n哇麦智能'))
def a4():
+e.style=appuifw.STYLE_ITALIC#斜体字
+e.add(m('\n诚邀大家学编程!'))
def a5():
+f.style=appuifw.STYLE_STRIKETHROUGH#删除线
+f.add(m('\n哇麦崛起'))
appuifw.app.menu=[(m('一级菜单一'),((m('粗体'),a1),(m('抹黑字体'),a2),(m('下划线'),a3))),(m('一级菜单二'),((m('斜体'),a4),(m('删除线'),a5)))]
appuifw.app.title=m('字体处理')
#代码结束#
讲解:在这里,处理字型效果就要借助graphics这个模块了,这个模块是专门处理关于图形界面的,以后会讲到!所以我在一开始就引进了这个模块,from graphics import *表示从graphics模块中引进其所有函数,不懂没关系,你就照着这么做吧。再看:appuifw.app.body=a=b=c=d=e=f=appuifw.Text()为什么中间插入了这么多的字母和等号呢?继续看我下面的讲解吧!a.color=0x0000ff表示对字体

设置颜色(在这里是蓝色),如果想换成其他颜色,那就更改等号后面的代码就行了!哪里有这些颜色代码呢?以后我整理一下再发上来吧!先发几个给大家(0xff0000代表红色,0x00ff00浅绿色,0x333333白色,0 黑色)a.style=appuifw.HIGHLIGHT-SHADOW,这里就设置了a的文字风格,为阴影效果,其中style翻译为中文就是风格的意思!有点难记?HIGHLIGHT-SHADOW翻译为中文是高亮阴影的意思,其中SHADOW是阴影的意思。接着:a.add(m(‘哇麦论坛欢迎你!’))设置了a的风格和颜色后总该给一些文字给他表现一下效果吧!所以就给他添加几个为了显示效果的文字,关于添加文字,上一节已经讲到!那么为什么不改为预设呢?因为在前面我们用等号连接了很多字母,这些字母都等价于你输入的文本内容,当然这就包括了你添加的内容,如果你要预设,而在下面我将会给每个字母设置其字体风格,那么这预设的内容应该要哪一种风格呢,系统确定不了,于是就会出错!下面我们就开始定义函数了,我在这里再提醒大家一遍,要注意缩进,还有就是,appuifw.STYLE_BOLD表示应用了appuifw这个模块中的STYLE_BOLD这个函数,而这个函数就是用来处理字体风格的!b.style=appuifw.STYLE_BOLD这样就设置了b的字体风格,在后面又添加了为其显示效果用的文字!接下来的函数的定义依此类推,在创建菜单的时候,为了承接上一节的内容,我特意设置了两个二级菜单,上一节还不懂的,在这里再研究一下吧!appuifw.app.title=m('字体处理'),
1.1.7-------列表界面与if语句的使用--------
---------
在之前的学习中,我们启动程序后的界面都是一个文本框,够乏味的吧?其实appuifw这个模块可以为我们提供三种基本界面,分别是:Text(文本界面)、Listbox(列表界面)和Canvas(画布界面)。其实appuifw这个模块中还有一个Form函数可以把界面打造得更有个性!我们之前学习的就是文本界面,今天就让我们来学习新的界面—列表界面,同时我们也将学习if语句的使用!先看代码一向是我的习惯讲法,好的,马上开始,看代码(旧习惯,+代表空格)。
#代码开始#
import appuifw
def m(x):return x.decode("utf-8")
def a():
+M=[m('哇麦智能论坛'),m('八神论坛'),m('冰冰论坛'),m('乐迅论坛')]
+index=appuifw.selection_list(choices=M,search_field=1)
+if index==0:
++appuifw.note(M[index]+m('欢迎你!'),'info')


+else:
++appuifw.note(M[index]+m('是外坛!'),'info')
+appuifw.app.title=m('列表界面')
+a()
a()
#代码结束#
讲解:在这里,先得给大家介绍一下有关列表的知识!列表的格式是[*,*,*],其中*代表列表中的元素,当我们要访问列表中的元素的时候,例如列表中的第一个元

素,就表示成[0],第二个元素就表示成[1],(注:系统是从0开始计数的!)我们可以用相关语句向元素中增加或删除元素,还可以进行排序,倒序!例如代码中的列表:M=[m('哇麦智能论坛'),m('八神论坛'),m('冰冰论坛'),m('乐迅论坛')],其第一个元素就是m('哇麦智能论坛'),如果想引用这个元素,就表示成M[0],例子中的是M[index],但我们已经为 index赋了值,他表示一个数字,所以M[index]还是访问了列表中的元素,这个大家应该可以很轻松就能够理解的!继续:index=appuifw.selection_list(choices=M,search_field=1) 这段代码将index与列表中的选项一一对应了起来,还是翻译一下吧!index(指标)、selection_list(选项列表)、choice(选择项目)、search_field(查找范围),列表界面就是应用了appuifw模块中的selection_list函数,choices=M表示了在界面上供选择的列表内容,为M这个列表中的元素,这些元素将在界面上排成很多列,从上到下,search_field=1表示了是否查找列表中的项目,就像我们进入名片夹中那样去查找联系人那样,0表示不查找,1表示查找,顺便说一下,在编程语言中,绝大多数情况下0表示否定(falsh),1表示肯定(true)!如果列表项目不多,建议你不查找,我在示例代码里写了1是为了展示其效果而已!下面我么就开始使用if语句了,if翻译为中文就是“如果”的意思,主要是用来实现判断的作用。if index==0:意思就是如果我们选中列表中的第一项,在实际执行界面上也就是如截图中的“哇麦智能论坛”,那么我们就执行相关的任务,要注意,在这里index和0是用两个等号连接起来的,0后面还要有一个“:”号,任何一个标点都不可以马虎啊!相关的任务就是其下面的代码,为一个简单的提示。你注意到了吗,在这里的缩进是怎样的?根据我以前的说法,appuifw.note(M[index]+m('欢迎你!'),'info')就属于“第**”了!其中的M[index]表示什么大家应该知道了吧?else翻译为中文就是“另外”的意思,但他在这里有“否则”的意思,也就是如果之前的if语句判断后没有通过,那么就转为执行下面的语句而绕过if语句的内容,下面同样是一个简单的基本提示任务!代码的最后有两个a(),第一个a()的作用是:在系统判断并执行相关的任务之后让他再回到这个列表界面,因为系统默认的界面是文本界面,如果不让他重新回到列表界面,执行了相关任务后界面就会变回乏味的文本界面了。如果我们定义了一个函数,命名为b,那么b()就表示让这个函数运行!最后一个又有什么作用呢?注意到第一个a(),他本身是定义在a()这个函数里面的,如果我们没有第二个a(),即使你定义了他他也不会

运行,就等于白定义了,就像你造了一艘船,但却没有机会拿去海洋里使用!同时在这里你也可以体会得到缩进的意义。在这里有一个问题,就是关于appuifw.note(M[index]+m('欢迎你!'),'info')这个语句的,用+号可以把字符串连接起来,但这不是问题所在!问题就是我们可不可以去掉M[index]+这一段,就让他显示我想让他显示的内容就行了,没有必要与列表的内容有关联,理论上来讲是完全可行的,但我在我的70上尝试过去掉,但结果是按退出键就执行else的相关任务,也就是没办法退出,最终只能硬退!但只要那两段代码与列表内容有关联就可以正常运行了!
1.18--------列表界面(二)---------
上一节我们学着怎样创建了列表界面!今天将补充更多的关于列表界面的内容!一个是复选列表,另一个是带有图片描述的列表!有点模糊吧?看最后的截图就会知道是什么了。所谓复选列表也就是具有多个选择的列表,如截图就选中了两个,当然我们可以选中全部选项!而带有图片描述的列表其实就是多了一副附在文字左边的图片(如截图所示)。好了,先来看复选列表的代码(+代表一个空格)!
#代码开始#
import appuifw#引入模块
def m(x):return x.decode('utf-8')
M=[m('¤随缘情恋¤'),m('¤刹那芬华尽¤'),m('¤为你变乖¤'),m('¤无与/aiq恒比¤')]#创建列表
index=appuifw.multi_selection_list(choices=M,style='checkbox',search_field=1)#将索引与复选列表对应
#代码结束#
讲解:代码看起来很熟悉吧!上一节我们用的是appuifw模块中的selection_list函数,在这里利用的是multi_selection_list这个函数,multi就有“多元”的意思! 为了简化代码,我就不再为每个选项赋上相应的响应事件了。也就是当你选中列表中的选项并按确定时系统是没有反应的,而是直接退出了!当然,你可以按照上一节关于if语句的用法为这些列表选项赋上相应的响应事件,例如弹出一个基本的提示窗口。这段代码与之前相差最大的地方是index=appuifw.multi_selection_list(choices=M,style='checkbox',search_field=1)这一段代码!appuifw.multi_selection_list()表示调用了appuifw这个模块中的multi_selection_list()这个函数!括号中为相应的参数,其中choices=M和search_field=1在上一节讲解过了,style='checkbox'定义了复选的风格,如截图的是在复选框里打叉,style翻译为中文是“风格”的意思,另外还有一种风格是在列表项目后面打勾进行标记,为style='checkmark',我的70显示不了这种风格,麦友可以自测!好了,关于复选列表的就讲那么多!
接着再来看带有图片描述的列表界面的代码(如果代码跨页,建议全文查看!)
#代码开始#
import appuifw
from graphics import *#借用该模块引入

图片
def m(x):return x.decode('utf-8')
icon1=appuifw.Icon(u'z:\\system\\data\\avkon.mbm',28,29)#图片一位置
icon2=appuifw.Icon(u'z:\\system\\data\\avkon.mbm',40,41)#图片二位置
list=[(m('信号'),icon1),(m('电池'),icon2)]
def a():#定义响应事件
+appuifw.note(m('哇麦论坛欢迎你!'),'info')
appuifw.app.body=appuifw.Listbox(list,a)
#代码结束#
讲解:先来了解一下MBM的知识!塞班有一种特殊的压缩图片格式就做mbm,它包含了多副位图,通过编号调用所需图片,每张位图包含一张彩色图和其相应的蒙版图!本示例代码中,引用相关描述的图片就要借用到graphics这个处理图像方面的模块了,所以从一开始就引进了appuifw和graphics这两个模块。icon1=appuifw.Icon(u'z:\\……',28,29),在这里我们通过appuifw模块中的Icon函数调用了mbm图像中的位图,也正是这个函数需要引进graphics模块进行辅助,他的功能的实现依赖于graphics模块!很明显,u'z:\\system……'指明了要调用的mbm文件的完整路径,28,29分别是所调用mbm文件中其中一个位图的彩色图及其相应的蒙版图的位置编号,概括起来格式就是:描述图片=appuifw.Icon(mbm文件完整路径,彩色图编号,相应蒙版图编号)。紧接着我们就可以创建一种新形的列表了,正如代码中所呈现出的,可以概括出其格式为:[(列表一文字,描述图片一),(列表二内容,描述图片二),……] 在下面定义界面类型时需要一个响应事件,所以我简单定义了一个函数a,为一个基本提示!appuifw.app.body=appuifw.Listbox(list,a)定义了界面类型为Listbox(列表界面),怎样定义?再来概括一下格式吧:appuifw.app.body=appuifw.Listbox(相应列表,响应事件) 。在截图中,为了能够更好地显示效果,我给列表增加多了三个元素,为什么示例代码中要调用那两张mbm图呢?简单,诺基亚的机中都有这两个文件啊!另外我加进去的我不能保证你们的手机都有,所以没有写进去!学习的时候,你可以针对自身的具体情况增加元素,因为格式已经给出,只不过是“依葫芦画瓢而已”!
1.1.9-----定义左右键名及定义右键-----
在文本界面里,左键的名称是“选项”,右键的名称是“退出”,在列表界面里又分别是“确定”、“取消”。有时我们想让他们变成我们想要的名字以显示我们的个性,今天就来教大家怎样定义左右键名称!看代码!
#代码开始#
import appuifw
import uitricks
from key_tricks import *
uitricks.set_text('哇麦智能'.decode('utf-8'),EAknSoftkeyOptions)#定义左键名称
uitricks.set_text('我要回家'.decode('utf-8'),EAknSoftkeyExit)#定义右键名称
def exit():
+if appuifw.query('真的要回家吗?'.decode('utf-8'),'query'):
++appuifw.app.set_exit()
appuifw.app.exit_key_handler=exit
#代码结束#

讲解:定义左右键名称就又要引入urtricks模块了,而uitricks这个模块又依赖于key_tricks这个模块的协助,所以我们引入了三个模块!当然,这个是建立在你的手机里具有这些模块的前提上!那么对于key_tricks模块我们可不可以这样引入呢:import key_tricks 经测试是不可行的!为什么?以后再说吧!我们安装python平台其实就是安装了这些模块,平时的插件其实就是一----------
些模块包!如何知道自己的手机里有没有所要引入的模块呢?有两种方法。第一种:如果你的Python平台安装在E盘,就打开E:\\system\\Libs,你会看到很多以py、pyc、pyd为后缀的文件,以py为后缀的是未经过编译的脚本文件,我们可以用Yedit文本编辑器打开查看其代码,具有公开性,以pyc、pyd为后缀的则是经过编译的脚本,其目的是不想让别人看到里面的原代码,具有非公开性,用Yedit文本编辑器打不开或者打开了看到的是乱码!这时你就可以查看有没有你要引入的模块名称了!第二种方法就要利用你的Py解释器了,打开解释器进入交互式控制台(interactive-console),进去后你会发现是可以编辑的,例如我们想知道手机里有没有uitricks这个模块,那就打入import uitricks,如果 没有弹出一大堆英文,而是另起了一行(如截图),那就证明该手机里具有该模块!其中要注意模块名称,topwindow和TopWindow是两个不同的模块!看回代码吧!引入模块后我们就可以直接定义左右键名称了,为什么不用定义界面类型呢?因为系统会在你没有定义界面类型的时候默认为文本界面,专业点来说就叫做“缺省界面”。uitricks.set_text() 定义左右键名调用了uitricks模块中的set_text函数,括号里为相应参数!格式是:uitricks.set_text(自定义的键名,要改名的按键),'哇麦智能'.decode('utf-8') 这段代码后面为什么为什么多了一段英文呢?因为之前我们没有定义到中文的编码方式,这里就要临时定义了,大家要掌握好其格式,其他的一样的道理!接着来定义退出键,之前是一按退出就退出了,在一些软件里面也如此,有时只是我们不小心按到的,这样我们就有必要让系统询问用户是否退出!这是一种判断,所以就用到了if语句,if appuifw.query('真的要回家吗?'.decode('utf-8'),'query')学编程就是在学一种语言,学着如何与系统交流,让它为我们服务!翻译这段“语言”吧!不会?也就是“如果询问:真的要回家吗?”,如果你按确定,那就执行下面的语句任务,否则返回!appuifw.app.set_exit() 这个语句能够实现系统的退出!大家都知道app是软件的启动器,app.set_exit()意思是说把app的状态set(翻译为中文是“设置”)为exit(翻译为中文为“退出”)

状态!这样就退出了主程序!再来看最后一句:appuifw.app.exit_key_handler=exit 之前只是定义了一个函数,但该函数要通过按什么键来执行呢?我们共同的意向就是把它设在右软键上,当然也可以把它设在菜单项里!该语句就是告诉了系统,当我们按下右软键时就调用之前定义好的函数,从而实现退出!如果你想把右软键设置为其他功能,例如按下右软件弹出一个提示框,假如定义弹出提出提示框的函数为b(),那就appuifw.app.exit_key_handler=b 在这里,定义右键动作时有点特殊,就是exit没有写成exit(),b没有写成b(),概括起来就是定义右软键动作时其对应的函数是不用带括号的!为什么?恕我愚昧!这是系统的需要,我们只能遵从这样的规律!
1.2.0------折叠界面-------:
所谓折叠界面,也就是具有多页的界面,就像我们看书那样,有很多页!页是可以翻的,所以折叠界面也有着同样的属性!之前说到appuifw这个模块可以为我们提供三种基本界面,那么这个界面又属于什么呢?其实折叠界面的子界面还是属于那三种基本界面,记住是“基本”!废话不多说,来看代码!
#代码开始#
import appuifw
def m(x):return x.decode('utf-8')
def a(index):
+if index==0:
++appuifw.app.body=appuifw.Text(m('这是界面一'))#定义界面一主体
+if index==1:
++appuifw.app.body=appuifw.Text(m('这是界面二'))#定义界面二主体
+if index==2:
++appuifw.app.body=appuifw.Text(m('这是界面三'))#界面三主体
appuifw.app.set_tabs([m('界面一'),m('界面二'),m('界面三')],a)
#代码结束#
讲解:来看def a(index)为什么括号里多了index呢?我说过,函数的括号里的是参数,index是“下标”、“索引”的意思!看下面的代码,你也许就会知道index是做什么用的!下面的关于if语句的使用和相关的响应事件的定义与之前的列表界面是类似的,只是在这里响应事件换成了定义界面主体而已!不懂?重温列表界面章节吧,呵呵!看最后一段代码:appuifw.app.set_tabs([m('界面一'),m('界面二'),m('界面三')],a)与上一节讲解类似,该语句就是将app(软件的启动器)set_tabs(设为折叠界面),括号里有个列表(列表是用[]号括起来的),之前index==0这些指标就是和这个列表对应的,要记得系统是从0开始计算的,index==0其实就是index==m('界面一'),在这里值得注意的是,折叠界面的每一个子界面都要对应列表里面的一项,不像之前的那样有elif语句,这里是一一对应的关系!这些界面都共享了同一个函数,因为在这个函数里面,已经对不同的界面的参数与列表的项一一对应了,并且使用了if语句作出了判断,因而虽然共用一个函数,但并不会发生“冲突”!例子里只是创立了三页,你

可以创建更多的页,但可行性要依据具体情况而定,不可一概而论,
1.2.1---------自动弹出菜单与键值对应--------
所谓自动弹出菜单,顾名思义,也就是在你一启动程序的时候,系统就会自动弹出菜单!之前我们要按左软键菜单才会调出菜单选项,如果我们有必要从一开始就设定相应的系统参数,为下面的操作提供方便,那么我们就要提醒用户去选择这些菜单项了!好了,GO!
#代码开始#
import appuifw
def m(x):return x.decode('utf-8')
list=[m('哇麦'),m('乐迅'),m('玩机')]
index=appuifw.popup_menu(list,m('请选择'))
if index==0:
+appuifw.note(m('哇麦论坛欢迎你!'),'info')
if index==1:
+appuifw.note(m('乐迅论坛是外坛哦!','error')
if index==2:
+appuifw.query(m('你是玩机高手吗?'),'query')
#代码结束#
讲解:引入模块,定义中文编码后,我们就创建了一个列表:list=[…,…,…],列表做什么用的呢?再看下面:index=appuifw.popup_menu(list,m('请选择')) 似曾相识是吗?在之前的列表界面这一章节我们知道,列表是可以调用来做索引的!怎样调用?举个例子,list[0]其实就等于m('哇麦')。 列表里的内容是呈现给我们看的,在这里就是对应了菜单的各个选项名称,并且是按照其在列表中的顺序排好了的,如上面代码中的index==0,其实就是index==m('哇麦'),他排在菜单项的最上端,这些我在之前已经讲过,今天就再重复一下!其实真要说得非常明白,我做不到,语言表达能力有限吗!呵呵!学编程靠的还是自己多啄磨。概括一下格式吧:appuifw.popup_menu(菜单项名称对应的列表,提示内容),怎么没有了index=呢,和上面的代码不同啊?在这里只是为了让系统弹出菜单而已,但没有为每一个选项设置了响应事件,调侃点说,这样做“有姿势,没实际”,呵呵!如果真不明白,结合截图就会一清二楚了!下面的还是关于if语句的使用, 如果你现在还没 有一个概念,抖胆问一句,之前的章节你有看了吗?这个我就没有必要再重复咯哦!
键值对编
键值对?一头雾水吧?其实很简单,假如你定义了任务为一个基本提示的函数,按照之前的做法,你可以把它设在菜单选项里来调用执行,当然也教了你把它设在右软键上,如果我们想通过按其他的键来让这个函数执行呢?例如按数字键!键值对就是把函数与这些键对应起来的方法,就像我们玩游戏那样,按导航键可以操作,按数字键同样可以执行相同的动作!键值对这个名称也许并不专业吧,但我是这么叫的,所以就这样教给大家咯,呵呵!键值对方法其实很简单,不信?看代码!
#代码开始#
import appuifw
def m(x):return x.decode('utf-8')
appuifw.app.body=appuifw.Text()
def a():

+appuifw.note(m('就是那么简单!'),'info')
appuifw.app.body.bind(63586,a)
#代码结束#
讲解:够简单的吧,以致于我也没什么好解释的!我简单定义了一个函数,然后将该函数与相应按键对应起来,格式是:appuifw.app.body.bind(键值,相应的响应事件) 例子中,63586代表拨号键,bind翻译为中文有“绑定”的意思,个人理解就是把拨号键与函数a绑定!奇怪了,之前讲过如果没有定义界面类型,系统会默认为文本界面,但这里为什么要定义呢?也就是在之前为什么要添上这一句:appuifw.app.body=appuifw.Text() 看回代码:appuifw.app.body.bind(63586,a) 按照我对这段代码的翻译就是:将app(程序的启动器)的body(主体)中的63586(代表拨号键)与函数a绑定!那么我们就有必要向这个语句提供这样一个基础---主体是什么呢?皮之不存,毛之焉附!没有主体,“绑定”了也没有用。所以我们就要先给程序定义一个主体,为文本编辑。这就是我 对这个特例的解释!也许这是一种误解,还请高手指点!既然主体是文本编辑,那么数字键,*键,#键等键就会被占用,这时我们就不能将函数a与这些键绑定咯!就这样,当你启动程序后,按下拨号键看有什么反应!下面附上键值表!
注:该键值表是在3230上测试获得。
删除键:8 #键:35 *键:
0键:48 1键:49 2键:50
3键:51 4键:52 5键:53
6键:54 7键:55 8键:56 9键:57
左导航键:63495
右导航键:63496
上导航键:63497
下导航键:63498
笔型键:63499
PTT键:63562
菜单键:63570
拨号键:63586
挂机键:63587
OK键:63557
1.2.2--------字体风格混合使用及双文本输入-------:
在1.1.6章节,我们学习了如何去定义文本编辑的字体风格,其中有粗体、抹黑字体、斜体字、下划线、删除线!我们也许就会想,可不可以把这些字体的风格混合起来使用呢?这样就能彰显我们的个性啊。既然我这样问,那么答案当然是可以啦!好了,开始学习吧,看代码!
#代码开始#
import appuifw
def m(x):return x.decode('utf-8')
appuifw.app.body=a=appuifw.Text()
a.style=(appuifw.STYLE_BOLD|appuifw.STYLE_ITALIC|appuifw.STYLE_UNDERLINE|appuifw.HIGHLIGHT_STANDARD|appuifw.STYLE_STRIKETHROUGH)
a.color=0x004000
appuifw.app.title=m('字体混合使用')
#代码结束#
讲解:在这里只需解释一下这句:a.style=(appuifw.STYLE_BOLD|appuifw.STYLE_ITALIC|appuifw.STYLE_UNDERLINE|appuifw.HIGHLIGHT_STANDARD|appuifw.STYLE_STRIKETHROUGH) 你会发现很多“|”,就是这个符号把appuifw这个模块中各种字体的风格混合了起来,那些英文都是什么意思呢?再解释一次吧:appuifw.STYLE_BOLD(粗体),appuifw.STYLE_UNDERLINE(下划线),appuifw.STYLE_ITALIC(斜体),appuifw.HIGHLIGHT_STANDARD(抹黑字体),

appuifw.STYLE_STRIKETHROUGH(删除线) 在之前的章节中,我们也学过字体阴影这种风格,然而在这里他不能和抹黑字体风格混合使用,也就是appuifw.HIGHLIGHT_SHADOW和appuifw.HIGHLIGHT_STANDARD不能为同一个文本对象同时服务!为什么?抹黑字体了还能产生阴影吗?这是一对矛盾,有矛盾,软件就会出错哦!其实还有另外一些字体风格可以使用,怎么知道呢?运用好你的Py平台解释器,在交互式控制台下首先输入:import appuifw 按确定后,他会另起一行,再输入:dir(appuifw) 然后再按确定!这时解释器就会列出一个很长的列表,里面表示的都是appuifw这个模块中的可用函数,都用单引号括了起来!这时你可以找到代码例子里面所引用的函数名,如STYLE_BOLD 其他的关于处理文字风格的函数名可以说都是大写字母的,我测试过,发现有一些效果是相同的,你也不妨自己测试一下哦!你也可以用我上面提到的方法去查看其他模块中的可用函数!
双文本输入编:
之前我们学习了利用appuifw模块中的query函数来询问用户输入信息,那是单文本输入,而今天要介绍的就是双文本输入,其实用法差不多,他调用了appuifw模块中的multi_query函数(之前说过,multi就有“多种”的意思),用法格式是:appuifw.multi_query(提示内容一,提示内容二) 内容很简单,我也不准备进行解说了,下面给出一段很短的示例代码!
#代码开始#
import appuifw
def m(x):return x.decode('utf-8')
appuifw.multi_query(m('姓名:'),m('性别:'))
#代码结束#
1.2.3------文本保存与文本读取-------
学了那么多关于文本编辑的知识,我们可以在自己开发的简单的文本编辑器上面去编写我们的内容!例如一个精贴!当然,那么精彩的贴子,我们就有考虑把他保存起来!另外,如果我们想把一些精彩的文本添加到当前的编辑中去(假如那些文本保存在E:\\text.txt,下面就以这个为例子)那么这就涉及文本的读写!开始吧,看代码!

#代码开始#
import appuifw
def m(x):return x.decode('utf-8')
appuifw.app.body=k=appuifw.Text()
def a():
+s=k.get().encode('utf-8')
+t=open('E:\\text.txt','w')
+t.write(s)
+t.close()
+appuifw.note(m('保存成功!'),'conf')
def b():
+try:
++d=open('E:\\text.txt')
++e=d.read().decode('utf-8')
++d.close()
++k.add(e)
+except:
++appuifw.note(m('未找到文件text.txt'),'error')
appuifw.app.menu=[(m('保存当前'),a),(m('读取'),b)]
#代码结束#
讲解:在这里,需要讲解的就是我们所定义的两个函数a和b,a函数是保存文本功能,b函数是读取文本功能,先来看a函数的主块内容!s=k.get().encode('utf-8'),其中get翻译为中文是“获取”的意思,这句代码的意思为:获取(get)我们输入的文本内容k并且把这些内容以ut

f-8的方式编码(encode),然后把内容信息赋给s,也就是说,s代表了我们想要保存的文本内容。获取了这些文本内容之后,我们当然要找一个地方把他保存起来:t=open('E:\\text.txt','w'),其中open翻译为中文就是“打开”的意思,在这里,我们打开了文件text.txt,而E:\\text.txt是这个文件的路径,在这里,你也许会想,是不是我们要先新建一个命名为text.txt并且路径要与上面提到的一致的文件才行呢?回答是:不用!系统会按照路径自动生成这样一个文件。后面那个'w'是表示只写(w是英文write-写的首字母)的意思,也就是说,当我们打开了text.txt这个文件之后,我们可以在里面写进内容,如果改为'r',也就是只读(r是英文read-读的首字母),那么我们就不可以写进内容了!既然要保存,那当然要写入内容啦!t.write(s),这段短代码的意思是:把刚才获取的文本内容s写进(write)文件t里面!最后写完了,可别忘了关闭这个文件以供系统使用,也就是t.close()否则保存失败!如果保存成功,接着你就可以看到提示:appuifw.note(……)再来看读取文本,我们保存了刚才的文本,现在我想把他添加在我当前的文本编辑中去!在这里,我们又涉及了try和except语句,按照Py语言分别翻译为中文“尝试”、“否则”!在函数b里的主块里,我先使用了try语句,为什么要尝试呢?因为如果系统里根本不存在我们要读取的文件E:\\text.txt,那么这就算读取失败,因而我们先尝试执行假如有这个文件的情况!d=open('E:\\text.txt')打开要读取的文件,并把信息内容赋给d,e=d.read().decode('utf-8')读取d的内容并且把这些内容以utf-8的编码方式反编(decode)回来,为什么?因为我们在之前保存的文本内容已经以utf-8的编码方式写入,在这里如果不反编回来,你看到的将是一堆超多笔划的字!从哪里来就回哪里去,就是这个原理,呵呵!d.close()读取完之后,当然要关闭文件供系统使用啦,你也许会想,打开了又关闭,还怎么读取啊?仔细看一下,我们已经把读取到的内容赋给e了,而我们关闭的只是d这个原文件。k.add(e)这步就是把读取到的文本内容添加(add)到当前编辑中去!如果text.txt文件不存在,那么就改换任务:appuifw.note(m('未找到文件text.txt'),'error') 为一个报错的提示窗口!
1.2.4----文本替换与文本分割-----
不知道麦友在之前的章节学得怎样了!很够无聊的吧,从上一章节的查看次数就知道到现在我已经有点“对牛弹琴”,独唱高调了!也许现在这些看起来乏味,没什么学习价值吧,但我们不可能一蹴而就。现在我们是在扎实基础,暂时是枯燥乏味的,然而真正有趣的编程之旅还没开始呢!到后面你

就会知道要实现一个功能是多么的简洁,感受到Py语言的威力!欲穷千里目,更上一层楼!另外,在电脑上,用opera浏览器可以直接查看代码,所以麦友在之前章节编写的代码如果有运行错误的可以在回贴中附上你的代码,我会尽量帮你查看,找出错误,并给你留言!
之前已经讲了那么多,如果你是有心人,基本的语言习惯相信你已经掌握,所以在以后的章节中我会力求简洁。来开始今天的学习内容吧!
#代码开始#
import appuifw
def m(x):return x.decode('utf-8')
appuifw.app.body=n=appuifw.Text(m('确实哇买好哇买棒哇买劲哇买顶瓜瓜'))
def rep():
+f=n.get()
+k=f.replace(m('买'),m('麦'))
+n.set(k)
def spl():
+s=n.get()
+g=s.split(m('哇'))
+n.set(g[-1])
appuifw.app.menu=[(m('替换'),rep),(m('分割'),spl)]
#代码结束#
讲解:还是来看新定义的两个函数吧!rep函数是文本替换功能,spl是文本分割----------
功能!先来看rep函数的主块。f=n.get()获取输入的文本内容(已预设,也就是“确实哇买好哇买棒哇买劲哇买顶瓜瓜”)并将其信息赋给f,与之前保存章节不同的是,获取内容之后并不需要对其进行编码,为什么?因为我们没打算要报存他啊,并且我们也是拿与其同是utf-8编码的文本来替换他!k=f.replace(m('买'),m('麦'))将f中的所有“买”字替换成“麦”字并将内容信息赋给k!其中replace翻译为中文就是“替换”的意思!替换文本的格式为(以代码例子为例):f.replace(要替换的字,替换成的字),替换好之后,想看一下效果,那就再n.set(k),即重设当前编辑的文本内容!接着看spl函数。同样地,我们先要获取文本内容:s=n.get()。紧接着我们就开始了分割:g=s.split(m('哇')),看到这里,你自己也可以总结出分割文本的格式(同样地,以例码为例):s.split(作为分割点的字)。很明显,例子中以“哇”为分割点!被分割之后的文本是一个列表,上面说的s.split(m('哇'))等价于(这里是在原先预设的文本还没有被替换的情况下,也就是还没执行rep函数)这样一个列表[m('确实'),m('买好'),m('买棒'),m('买劲'),m('买顶瓜瓜')],注意,列表里面的元素的顺序不是我乱编的,而是依照被分割的先后顺序排列的,如“确实”两个字本最先分割,所以排在列表里的第一个位置!分割之后看一下效果,我们就把最后一个元素设到编辑中去:n.set(g[-1])。g是什么?就是上面提到的那个列表咯,我们已经把分割后的信息赋给了g啊!g[-1]表示g这个列表中的倒数第一个元素,倒数第二个呢?那就是g[-2]咯!依此类推!
1.2.5-----文本查找------
假如我们获得了一个网址,例如我们平时发一个链接贴的时候:(URL=https://www.360docs.net/doc/9d10847785.html,/wml/bbs/forum.vm?fId=1) (s60一、

二版交流区) 当然,链接不是这样做的,这里是找个例子而已!我们想把其中的网址提取出来,并把他添加到编辑中去,这就要涉及文本的查找了!那么我们该怎样做呢?这就是本节要介绍的知识!来看代码吧。
#代码开始#
import appuifw
def m(x):return x.decode('utf-8')
appuifw.app.body=n=appuifw.Text()
def seek():
+content=u'(URL=https://www.360docs.net/doc/9d10847785.html,/wml/bbs/forum.vm?fId=1)(s60一、二版交流区)'
+start=u'//'
+begin=content.find(start)
+end=content.find(u')')
+begin+=len(start)
+text=content[begin:end]
+n.set(text)
appuifw.app.menu=[(m('提取'),seek)]
#代码结束#
讲解:其实一直以来,我们都是在学着怎样去不断定义不同功能的函数,例如之前的文本替换、分割!所以我们还是只把中心放在所定义函数的主块上!该段代码只定义了一个函数seek,来分析他的主块吧!content=u'(URL=https://www.360docs.net/doc/9d10847785.html,/wml/bbs/forum.vm?fId=1)(s60一、二版交流区)' 这句给出了我们所要处理的文本内容,并将其内容信息赋给content
start=u'//' 这是开始查找的标识文本,紧接着:begin=content.find(start)以Py语言翻译这句话:在所要处理的文本中(也就是上面说到的content)查找(find翻译成中文就是“找”的意思)以start为标识的文本!end=content.find(u')')同样地,这句的意思相信不需要我重复解释了吧!但值得注意的是,系统只会查找第一个“)”,尽管后面还有一个“)”!关键看下面begin+=len(start),完全不懂是吗?先来解释一下len(start),其中len是英文length(翻译成中文是“长度”)的缩写,len(start)就是计算标识字符串start的长度,因为在之前start=u'//',所以len(start)等价于len(u'//'),其输出结果是2(不能把u和标点也算进去,那是为了编码的需要而已),不会算?两个“/”不就是两个字符吗?长度自然就是2咯!举多一个例子吧,len(u'adgmpw')输出结果为6!整体来看,begin+=len(start)又该怎样理解呢?其实他等价于begin=begin+len(start)这是Py语言中的表达习惯!学过高中数学程序框图的就会知道,我们这是为begin重新赋值定义了!还是有点难理解是吧?真的不懂就慢慢琢磨吧!说一下其功能吧:在查找到相应字符的基础上再向前推移长度2!为什么要这样?我们不做无用之功!接着看就知道为什么了。这要涉及列表的知识!假如现在有一个列表为m=[u'a',u'b',u'c',u'd',u'e'],在之前我们知道,m[0]就等价于u'a',现在变一下:m[0:2],(要记得,系统是从0开始计算的!)这个又等价于什么呢?m[0:2]表示从列表m的第一项开始到第三项为止,但不包含第三项,直接点,其就等价于[u'a',u'b']这样一个列表。根据这个原理,如果我们没有再次为上面提到的begin赋值,即向前推进两个单位,那么我

们查找出来的网址就是以“//”开头的,而不是“wap”!text=content[begin:end]就表示了我们要查找的网址,并将其赋给text,最后我们就将网址添加到编辑中去:n.add(text)
1.2.6----Form界面------
早在之前,我告诉过大家appuifw模块可以提供三种基本的界面,另外还说了Form界面!Form界面与列表界面相似,但Form界面的列表项却是与列表界面的列表项有着很大的不同!到底Form界面是怎样的,你可以先看截图(在最后页),说多无谓,所见不同!还是开始看代码吧!
#代码开始#
import appuifw
def m(x):return x.decode('utf-8')
list0=[m('哇麦'),m('智能论坛')]
list1=(m('随缘情恋'),'text',m('感谢大家的支持!'))
list2=(m('我的Q号'),'number',334246568)
MAIN_list=[(m('诺机特攻在'),'combo',(list0,0)),list1,list2]
start=appuifw.Form(MAIN_list,appuifw.FFormEditModeOnly|appuifw.FFormDoubleSpaced)
start.execute()
#代码结束#
讲解:引入模块,定义中文编码方式后,我们就连续创建了一个列表list0和两个域描述列表list1、list2!什么是域描述列表?其实他也是一种列表,但他的属性是和其他表类不同的!限于水平问题,本人现在解释不了,还请高手指点指点!呵呵,不懂没关系,你就记住怎么用好了!先来看第一个域描述列表list1=(m('随缘情恋'),'text',m('学编程')) 列表中的元素是用方括号“[]”括起来的,而域描述列表中的元素则是用圆括号“()”括起来的,为什么list1中有个'text'呢?如果是个元素,那应该表示成u'text'啊?在这里,'text'并不是表示一个元素,他指示了该列表的属性,表示该元组具有可编辑的属性(text翻译为中文就是“写入文本”的意思嘛),编辑内容可以为任何Unicode字符串(包括中文、英文、数字及其他符号)!m('随缘情恋')是标题名称,最后的m('感谢大家的支持!')为编辑的预设内容,当然你可以不预设该项文本!相似地,list2具有同list1一样的属性,不同的是'text'改成了'number',英语好的人很容易就可以理解到,他指示了该域描述列表同样具有可编辑的属性,只是编辑时只能输入number(数字)!除了text、number这两个之外,还有date(日期)、time(时间)、combo(普通浮点数)!你可以分别测试一下效果!Form与普通列表不同的另一个地方是表中有表!上面提到的list0,list1,list2就是表!接着再看:MAIN_list=[(m('诺机特攻在'),'combo',(list0,1)),list1,list2] 这里重构了一个列表,列表中的元素实质上为三个域描述列表,这就是所谓的“表中有表”了。有点难理解的是列表中的m('诺机特攻'),'combo',(list0,0)这一句吧?上面说了combo是普通浮点数,不懂照做就行了!(list0,0)这句的作用是将list0中的第一项设为预设,也就是list0中的m('哇麦')!

补充说明一下,在list2中,你也许想在m('我的Q号')的中的“Q号”两字后面加一个冒号,也就是改为m('我的Q号:')。我们不需要添加了,系统会自动帮我们加上这一个冒号的,不管你的内容是什么!到这一步为止,我们还是停留在列表的准备工作上,下面我们才开始利用了appuifw模块中的Form函数:start=appuifw.Form(MAIN_list,appuifw.FFormEditModeOnly|appuifw.FFormDoubleSpaced) 一开始为什么就要start=…呢?讲最后一句你就会明白了!在之前讲列表界面这个章节中,关于selection_list函数的使用格式是:appuifw.selection_list(列表,相应的响应事件) 在利用Form函数时其实质也遵循这个格式!MAIN_list是列表,appuifw.FForm…|appuifw.FForm…就是相应的响应事件。纳闷了,我们没有定义到响应事件啊?其实appuifw.FForm…|appuifw.FForm…这两个函数是预先在appuifw模块中定义好了的,我们在这里调用!这两个函数是用“|”隔开来的,这个与1.1.6字体处理效果这一章节中的“|”的作用是一样的,表示混合使用!FFormEditModeOnly表示列表项为可编辑模式 FFormDoubleSpaced表示列表项采用双行矩布局模式!还有其他更多的模式,你可以用我以前教你们查看某一个模块中可用函数的方法去查找更多!看最后一句:start.execute() 这句的作用是:使上面构造好的Form界面可视化,也就是使我们做好的Form界面能够在屏幕上显示!所以刚才我们就先是start=…了!
1.2.7------创建画布-----
大家都觉得之前那些都很乏味吧?确实,那些缺少了多变的色彩与形式!谁人不想生活丰富多彩呢?还记得吗,appuifw这个模块可以为我们提供三种基本的界面,今天终于等来了画布界面,开始了一片多姿多彩的新天地。好的,就先让我们先学着去开辟自己的第一片天地--创建一块画布!有了画布,才能绘出精彩嘛!来吧,让我们看一段简单的代码!
#代码开始#
import appuifw
import graphics
appuifw.app.screen='large'
appuifw.app.body=canvas=appuifw.Canvas()
canvas.clear(0xff00ee)
#代码结束#
讲解:如果你在之前的章节中显示出过人的天赋,那么这个是无需多解释的!然而我还是要解释清楚,因为这是大家学习,而不是个人学习!废话挺多的哦,sorry!呵呵!appuifw中的画布界面需要graphics模块的辅助,即画布界面依赖于graphics模块才得以显示,graphics这个模块是专门处理有关图像方面的工作的,以后我会介绍的!所以一开始我们就引入了两个模块:appuifw和graphics!接着:appuifw.app.screen='large' 这个很早就讲解过了,是设定屏幕大小的,这里设为large(大屏)!再接着:appuifw.app.body=canvas=appuifw.Canvas() 这句设定了程序的主体,为画布界面(canvas翻译为中文就是“画布”

的意思),中间插入了一个canvas,是用来描述画布用的。如果你不打算描述画布,那就直接写成:appuifw.app.body=appuifw.Canvas() 并且去掉后面剩下的内容!但这样系统会使用缺省值(即默认值),默认画布的颜色为白色!这样多单调啊,所以我选择了描述画布:canvas.clear(0xff00ee) 这句代码使画布的颜色变成了如截图所示的颜色!其中0xff00ee为颜色代码!clear翻译为中文是“清除”的意思!整句代码用Py语言翻译的意思是:用0xff00ee所代表的颜色去清除画布!你可以想象得出,那样整张画布的颜色不就变成了0xff00ee所代表的颜色了吗?在这里着重说一下0xff00ee这种格式的颜色代码!大家知道,背投电视机屏幕上的各种不同的色彩都是由红、绿、蓝这三种颜色混合出来的!这里的原理也一样,0xff00ee中的0x之后的数字或英文字母就是颜色代码的决定部分!两个f代表红色色深,两个0代表绿色色深,两个e代表蓝色色深!字母可以从a到f中去取(即a,b,c,d,e,f),ff是最深的色,数字可以任意取,即0~9!总的来说,0x之后的6位中的每一位可以从a~f和0~9任意选择搭配!另外还有一种有效的颜色表示方法,还记得我之前制作的那个颜色代码查看器吗?在使用方法里我告诉大家记下三组数字,在这里我要讲的就是由三组数字组成的颜色代码!举个例子(128,200,238)。注意括号里面的三个数字就行了,每个数字可以从0~255中去取,在这里128代表红色色深,200代表绿色色深,238代表蓝色色深!最深色为255!如果是黑色(0,0,0)可以略写为0!这样你就可以按照这个原理去搭配你要的颜色代码!下面给出几种有效的颜色代码(具体颜色我就不清楚咯,乱搭配的!):
0xe2d4f8
0x026937
0xabcdef
0xff00aa
(12,61,198)
无效的颜色代码表示:
0wff00ee不是以0x开头
0xff00eg字母g超范围
0xff00eef多了最后一位f,0x后只能有6位
0xff00*e不能含有符号
(-1,128,280)#-1和280都超范围了(0~255)
(12,e*,64)不能用字母或符号代替数字
(12,128,280,46)很明显,多了一组数字
(12,128)少了一组数字
结合本节例子使用示例:
canvas.clear(0x0f0e0f)
canvas.clear((128,128,128))
1.2.8-------图形处理--------
上一节我们学习了如何去创建一块画布!画布本来的作用就是让我们在上面去描绘我们想要的图像的,所以我们这一节就来学习在画布上面处理图像的技巧!示例代码有点长(建议麦友在查看时采用全文查看的方式浏览),但原理绝对是简单的,有很多代码句是在重复着一个类似的方法,所以请给点耐心,别让表面的假像迷惑了!好了,代码开始了哦!
#代码开始#
import appuifw
import graphics
#引入所需模块

def m(x):return x.decode('utf-8')#定义中文编码方式
a

相关主题
相关文档
最新文档