设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 9253|回复: 39

【教程】跟米饭学Python编程【转】(目录构建完毕)

[复制链接]

签到天数: 451 天

[LV.9]以坛为家II

发表于 2012/1/24 22:15 | 显示全部楼层 |阅读模式
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
本帖最后由 飞翔的鱼 于 2012-1-25 17:26 编辑

因为原帖已被原作者删除,这里我整理一下零零碎碎的转帖,方便大家学习
基础篇
一、编程准备
[教程]跟米饭学PyS60编程(2)-编写代码
[教程]跟米饭学PyS60编程-开始编写(3.1)
[教程]跟米饭学PyS60编程(3.2)-添加菜单
[教程]跟米饭学PyS60编程(3.3)-定义函数
[教程]跟米饭学PyS60编程(3.4)-其他
[教程]跟米饭学PyS60编程(4.1)-选择列表
[教程]跟米饭学PyS60编程(4.1.1)-使用if语句
[教程]跟米饭学PyS60编程(4.1.2)-界面切换
[教程]跟米饭学PyS60编程-程序界面(4.1.3)
[教程]跟米饭学PyS60编程(4.1.4)-文本输入
[教程]跟米饭学PyS60编程4.1.5 一些其他的形式(一)
[教程]跟米饭学PyS60编程4.1.6 一些其他的形式(二)
[教程]跟米饭学PyS60编程(4.2)-图形界面
[教程]跟米饭学PyS60编程(4.3)-折叠界面
[教程]跟米饭学PyS60编程(4.3.1)-折叠界面补充
[教程]跟米饭学PyS60编程(5.1)-文本处理
[教程]跟米饭学PyS60编程(5.1.1)-文本处理1
[教程]跟米饭学PyS60编程(5.1.2)-文本的替换,分割,查找
[教程]跟米饭学PyS60编程(5.1.3)-打开、保存指定文件
[教程]跟米饭学PyS60编程(6.1)-播放声音
[教程]跟米饭学PyS60编程(6.2)-播放声音2



技巧篇
[教程]跟米饭学PyS60编程(技巧篇)-1. 如何知道某个模块的功能
[教程]跟米饭学PyS60编程(技巧篇)-2. 如何找出代码中的错误
电梯直达



简介:Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度。它可以用来开发各种程序,从简单的脚本任务到复杂的、面向对象的应用程序都有大显身手的地方。Python还被当作一种入门程序员最适合掌握的优秀语言,因为它免费、面向对象、扩展性强同时执行严格的编码标准。Python原于Unix,最初用于编写Unix下的一些脚本程序,后因为其与Java一样有着优越的平台无关性同时又有多语言无缝结合的强大优势,近些年广泛受到关注。Python被认为是未来最优希望与Java抗衡的应用层面语言。Python的平台无关性,使其迅速延伸到Symbian领域,在SymbianOS S60 2nd 和 3rd上都有相应的版本支持。Python 是Nokia S60智能手机平台的扩展开发语言。在Python 语言既有功能基础上,针对智能手机特有功能增加了访问支持,如:相机,电话本,日历,录音,回放,TCP/IP通讯,蓝牙通讯,基础话音任务等。
前言:

从接触PyS60到现在已经1个月了,从最开始的一无所知到现在的略知一二,在无数的通宵达旦中也积累了一些经验。最近Py越来越流行,也有很多机友想提高一下玩机水平,写出个自己的软件。但是网上那些教程对于没有编程经验的人来说简直就是天书,因此写这篇适合新手入门,循序渐进的教程,可以让你像我这样从一无所知到略知一二。由于作者也是新手上路,教程中难免出现谬误,还望高手批评指正。

首先要敬告您一下,编程可是很累的事情,而且在手机上写代码很费眼睛,我的视力最近就下降不少。

!还有,如果您是才玩智能机,对智能机最基本的东西(例如,用文件管理器删除软件,怎么打标点符号,等等)还不太了解的话,建议您还是先学会基本的再来,所以,如果您在跟随本教程学习的时候对您的手机产生什么影响的话,还请不要怪我。

开始→

一、编程准备

必备:S60第一或第二版手机,由于本教程仅针对一二版手机,因此三版手机请自测

所需软件:文本编辑器(业界都推崇PED,但是我个人还是比较喜欢用Yedit)

Python平台

Python module packs(模块增强包):

PY软件创建(这个我没有,写完代码后用这创建主程序吧)

准备工作完成。
[发帖际遇]: 飞翔的鱼 捡了钱没交公 威望 降了 3 . 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:17 | 显示全部楼层
[教程]跟米饭学PyS60编程(2)-编写代码

一、如何编写代码

其实py软件真正在起作用的只是软件里面的.py文件,里面是我们写的代码。现在我们来学习如何编写代码。

这里就要用到文本编辑器了,本文以yedit为例讲解,你也可以使用ped。现在打开yedit-->选项-->工具-->设置,把打开和保存的编码都设置为JAVA UTF8。

好,我们来尝试写一个小脚本来测试一下。(建议:代码部分不要直接复制网页,还是自己用手打,这样便于你记住代码)

------代码开始------

# 注释行以#开头。在编写代码时要养成写注释的好习惯,这样方便你自己理解代码

import appuifw

appuifw.note(u"8zntx.com","info")

------代码结束------

点击下载此段代码

注意:引号可以为单引号或双引号,由于论坛系统会把单引号变为中文的引号",所以这里发为双引号。 保存,文件名任意,但是后缀注意为.py。这里按保存在e盘根目录,命名为zntx.py讲解。

现在打开“py包装”,选项-->创建py程序,选择e:\zntx.py,然后按提示操作直到提示创建完成。退出。然后到功能表看是不是出现了一个新软件。打开它,看是不是弹出一个8zntx.com的提示框?如图所示。

如果没有出现或者打不开软件,请检查代码是否正确,所输入的符号是否是英文状态下的,是否全部为英文字符,是否已经正确的按照第一讲安装python平台。

现在我们来修改一下这个代码,让它变一下。用fileman到e:\system\apps下找到你刚才创建的那个软件,进去之后打开与软件同名的.py文件(不是default.py)[用fileman设置一下打开方式:选项-编辑文件-打开方式-选文本编辑]

现在把appuifw.note(u"8zntx.com","info")里面的8zntx.com改成你想要显示的字,例如yaogunmifan,现在还不能加中文,以后会讲解如何显示中文。改完之后保存,然后再打开软件看看效果。

这里的"info"意思是显示为提示信息,"conf"意思是显示为提示成功(对勾的),"error"意思是显示为提示错误。可以修改一下试试看效果。
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:19 | 显示全部楼层
[教程]跟米饭学PyS60编程-开始编写(3.1)

二、开始编写一个简单的程序

上一讲中我们学习如何编写代码,怎么样?你学会了吗?

现在我们来做一个最基础的软件,就相当于盖楼房的地基,有了这个你才可以继续

写各种功能的代码.

首先我们来学习编写一个主界面具有文本输入功能的软件.

这里我们还是要用到appuifw这个模块

****代码开始****

import appuifw

appuifw.app.body=m=appuifw.Text()

m.set(u"8zntx.com")

****代码结束****

讲解:

import appuifw为引入appuifw模块,这个是图形界面模块,应该是所有PY软件必须

引进的模块吧.

appuifw.app.body=appuifw.Text()这是定义软件的主体是显示文本方式.懂英语

的人应该很容易就理解吧.!!这里请注意:Text这个要注意大小写.

为什么在appuifw.app.body=appuifw.Text()中间加了一个=m呢?

往下看一行你就知道了,看下一行是m.set() 这是什么意思呢?就是在m(也就是

appuifw.app.body)上面放置括号里面的内容. 注意:如果用了set,是覆盖界面上

以前的文字.如果想在界面原有内容上添加文本的话就要用add(添加),这个我们稍

后会讲到.

注意了.要学习如何添加中文啦.现在你就可以在软件里显示:我爱某某某啦,再也

不用写 i love somebody了.

现在我们把刚才那个代码里加上点东西,让它变成下面这样:

****代码开始****

import appuifw

def cn(x):return x.decode("utf-8")

appuifw.app.body=m=appuifw.Text()

m.set(u"8zntx.com")

m.add(cn("\n米饭教程"))

****代码结束****

点击下载此段代码,下载后改后缀为.py

效果图

讲解:

def cn(x):return x.decode("utf-8")这个是定义cn()括号里的东西是以UTF-8编码返回,这里的cn可以为任意字符,但是既然俄罗斯人用ru,我们就应该用cn了,表

示中国的意思嘛.

再往下看m.add(cn("\n米饭教程"))这个,意思是在界面添加\n米饭教程,这里的\n

是就是换行的意思.如果想换两行就写为m.add(cn("\n\n米饭教程")) 这里要注

意cn里面的格式:一定要是cn("中文")这样.

在编程的时候一定要注意括号的对应,别写了左括号就忘记了写右括号,这样程序

会报错,我经常犯这种错误.写了一大堆之后一测试出错.希望你能从最开始就养成

好习惯.

现在我们再来看这个程序,是不是还少了点什么?对了,按选项怎么没有反应,好,下一讲:添加菜单

补充一句,大家在课后有什么问题可以在这个贴里跟贴,或者觉得我这种表达方式

不太好.所有意见都可以提.如果本节的代码你测试失败请对照下图看一一下你的代码是不是有错误,尤其要注意符号
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:20 | 显示全部楼层
评 论 [教程]跟米饭学PyS60编程(3.2)-添加菜单

2.2 添加菜单

首先我想说一下,有人说学PY要会C++.我倒不认为如此.我个人没有一点C基础,大一的时候计算机课我都不知道C语言是干嘛用的.所以相信我,只要你想学,没有基础无所谓.还有关于会不会英语这个事,由于我会一点英语,所以理解代码相对简单一些.但是,不会英语绝对不影响学习PY,只要你把平时用的那些代码记住,或者写到小本上,后面标上是什么功能,日子久了,你就能熟练运用它们了,不是所有程序员都精通英语吧?我一直坚信一句话,世上无难事,只怕有心人. 咱们继续...

上一讲中说了如何创建一个基础程序.现在我们再把那代码打开.

然后在里面加点东西 让它变成下面这个样子: 点击链接

****代码开始****

import appuifw

def cn(x):return x.decode("utf-8")

appuifw.app.body = m = appuifw.Text()

m.set(u"8zntx.com")

m.add(cn("\n米饭教程"))

appuifw.app.menu = [(cn("添加文字"),lambda:m.add(cn("这是添加文字功能"))),(cn("清除屏幕"),lambda:m.set(""))]

****代码结束****

讲解:

这里的appuifw.app.menu就是定义左选项键的代码.具体格式为:appuifw.app.menu=[(文字,动作),(文字,动作)] 平时在写代码的时候一定注意这里的括号对应正确. 再看上面的代码,(cn(’添加文字’),lambda:m.add(cn(’这是添加文字功能’)))这段代码中的lambda,我在PYTHON简明教程里看到的这个就翻译为lambda表达式,lambda语句用来创建函数对象.这个是什么意思就先不要管了,慢慢就明白了. lambda后面跟的是:m.add(),这个已经知道是什么意思了吧?下一个选项是清除屏幕,我们只是m.set了一个空白,就是说用空白覆盖以前界面上所有的文字.记得我最开始做十六进制快查的时候研究了好久清除屏幕的代码,结果有一天忽然想到原来就是这样.呵呵.
当然,上面的这个代码还可以写成下面这样,是一样的效果的.
****代码开始****
import appuifw
def cn(x):return x.decode("utf-8")
def add():m.add(cn("这是添加文字功能"))
def clear():m.set("")#括号里面是一对双引号
appuifw.app.body = m = appuifw.Text()
m.set(u"8zntx.com")
m.add(cn("\n米饭教程"))
appuifw.app.menu = [(cn("添加文字"),add),(cn("清除屏幕"),clear)]
****代码结束****
讲解: 这次我们定义了add和clear两个函数,然后在选项里我们定义:如果选择添加文字选项就运行add函数,如果选择清除屏幕就运行clear函数.
这里你可以把add和clear改为方便你记忆的字符,但是好像不能以数字开头和中文,例如这里你可以把add改为tianjia ,clear改为qingchu 这都是可以的.只要便于你理解就可以了.
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:21 | 显示全部楼层
评 论 [教程]跟米饭学PyS60编程(3.3)-定义函数

先说两句:有人说要全套代码说明,我现在还没找到这东西.我在写代码的时候如果需要什么功能的话都会去google搜索.一般都可以搜到,但是这个多数时候要用英文搜,因为国内的网站这种东西还相对较少.

2.3定义函数:

其实我也不明白这为什么叫函数,看教程上都这么说,但是不知道这跟数学那个函数有没有什么联系。就这么叫吧。

先跟大家介绍一下这个函数是什么,我们来看上一讲的代码。

def add():这里add就算是一个函数,我们在这里定义(def)了add之后就可以在选项或其他位置使用这个函数。

缩进:

空白在PYTHON中是重要的,事实上行首的空白是重要的,它被称为缩进.早逻辑行首的空白(空格或者电脑上的tab制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组.

这意味着同一层次的语句必须有相同的缩进,每一组这样的语句称为一个块.

你唯一需要记住的就是:错误的缩进会引发错误.如果你把代码写成下面这样就会出错:

def add():

m.add(u’a’)#注:前面是4个空格

m.set(u’b’)#前面是三个空格

像这样的代码肯定是错的.因为两个处于相同层次的代码没有相同的缩进.

一般情况下,缩进有三种:2个空格或者4个空格或者1个制表符.尽量选择一种缩进方式,在以后的编程种一直使用这种方式.本教程都按4个空格来讲解.

定义右软键动作:

上一节中我们做的那个软件,只要按右键就会马上退出.现在我们想在退出之前提示一下是否退出改怎么做?还是打开上节的那个代码,然后在里面加上点东西让它变成下面这样: 点击链接#****代码开始****
import appuifw
def cn(x):return x.decode("utf-8")
def add():
m.add(cn("这是添加文字功能"))
def clear():
m.set("")#括号里面是一对双引号
def exit():
if appuifw.query(cn("确定退出吗?"),"query"):#此行前面有4个空格
appuifw.app.set_exit()#此行前面有8个空格
appuifw.app.body = m = appuifw.Text()
m.set(u"8zntx.com")
m.add(cn("\n米饭教程"))
appuifw.app.menu = [(cn("添加文字"),add),(cn("清除屏幕"),clear)]
appuifw.app.exit_key_handler=exit
#****代码结束****
讲解:
现在我们看代码里多了appuifw.app.exit_key_handler=exit这样一个东西,我们知道上面的menu是定义左软键功能的,这里的exit_key_handler就是定义右软键的功能的.我们在代码里定义了右键动作为exit函数,这样,我们就要定义一下这个exit:所以看下面:if appuifw.query(cn("确定退出吗?"),"query"):这个是弹出一个询问框,如果点击确定则运行appuifw.app.set_exit()这个退出代码.否则就返回.这定义这个函数的时候,一定要注意缩进. if那一行是第一层次,下面那行就是第二层次了.
留个思考问题:如果我想把右键动作定义为添加文字功能,应该怎么做呢? (如果你这样做成功之后发现软件无法退出只能长按功能键然后按C强退的话,那么就要在选项中加入退出的功能了) 祝你成功.
如果在浏览时无法正常显示空格.请下载我的代码样本,改py后缀
关于缩进的补充:通俗来说,缩进就是,如果下面这句是当前这句的下一级,那就需要缩进,例如:如果天亮了:这是第一级,那么如果天亮了干嘛呢?下面这一级是返回动作:起床,这里起床就要缩进以体现它是上面那级的子级。然后,我们再说,如果天不亮,这个应该是和如果天亮了是同级吧?所以还是要和如果天亮了保持相同的缩进,那如果天不亮,我就继续睡觉。这个继续睡觉又要缩进。还不明白再回贴。
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:23 | 显示全部楼层
本帖最后由 飞翔的鱼 于 2012-1-24 22:25 编辑

评 论 [教程]跟米饭学PyS60编程(3.4)-其他
上节最后的那个思考问题你完成了吗?
现在我把我写的给大家看一下.
#****代码开始****
import appuifw
def cn(x):return x.decode("utf-8")
def add():
m.add(cn("这是添加文字功能"))
def clear():
m.set("")#括号里面是一对双引号
def exit():
if appuifw.query(cn("确定退出吗?"),"query"):
appuifw.app.set_exit()
appuifw.app.body = m = appuifw.Text()
m.set(u"8zntx.com")
m.add(cn("\n米饭教程"))
appuifw.app.menu = [(cn("添加文字"),add),(cn("清除屏幕"),clear),(cn("退出"),exit)]
appuifw.app.exit_key_handler=add
#****代码结束****
点此下载此代码(下载后修改后缀为.py)
对了,我记得有朋友回帖里说我在= m = 这里都加了空格,这个其实可以不加空格,只是为了代码美观.但是缩进里的代码可千万不能没有哦.
3.4
如果你一直跟着做到现在,而且所有这些例子你都能做好,那恭喜你已经入门了.因为现在你已经写出来一个软件了,尝试做一个类似编贴助手的软件吧.如果你没用过编贴助手那就在论坛搜索一下,下载一个试一下,然后尝试自己写一个简单的.
定义软件标题
就是在正常屏幕模式下显示在顶部图标旁边的名称.
appuifw.app.title=cn("米饭教程\n8zntx.com")
定义屏幕大小:
PY软件的默认屏幕显示是"normal"也就是正常模式,现在我们把它改为全屏显示.只需要在代码中加入:appuifw.app.screen="full" 这里的"full"(是全屏)可以改为"normal"(是正常)或"large"(是大屏模式)
可以相应的改动感受一下效果.
定义文字显示颜色:
appuifw.app.body.color=(0,0,255)
当然这里也可以用0x这种形式写,如:appuifw.app.body.color=0x0000ff
这里注意一下,因为代码中我们已经定义了appuifw.app.body=m了,这样我们就可以把它简写成m.color=(0,0,255)
#****代码开始****

import appuifw

def cn(x):return x.decode("utf-8")

def add():

m.add(cn("这是添加文字功能"))

def clear():

m.set("")#括号里面是一对双引号

def exit():

if appuifw.query(cn("确定退出吗?"),"query"):

appuifw.app.set_exit()

appuifw.app.screen="normal"#屏幕大小

appuifw.app.body = m = appuifw.Text()

m.color = (0,0,255)#文字颜色

m.set(u"8zntx.com")

m.add(cn("\n米饭教程"))

appuifw.app.menu = [(cn("添加文字"),add),(cn("清除屏幕"),clear),(cn("退出"),exit)]

appuifw.app.exit_key_handler=add

#****代码结束****

点此下载此代码(下载后修改后缀为.py)

好了.这个程序做到这里就算完成了,希望你能积极尝试修改.

我的经验就是多尝试,还有多看代码.看尽可能多的代码,然后记住其功能,这样以后编写软件需要什么功能就可以用什么代码.

这个章节就写到这里.下个章节还没有想好说什么
[发帖际遇]: 一个袋子砸在了 飞翔的鱼 头上,飞翔的鱼 赚了 4 樱币. 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:27 | 显示全部楼层
[教程]跟米饭学PyS60编程(4.1)-选择列表

在之前我们已经学会了如何写文本界面,现在我们来学习一下其他的几种界面,在继续之前请确定以前讲的你都已经会了,不然下面的东西可能会很难理解:)

3.1 选择列表

先看个图:

这里是个列表,列表中有两个选项.现在如果点"八神",我们看出来什么效果:

这个就是我们这一讲要说的:制作一个选择列表.

用到的还是appuifw这个模块,看代码:

#****代码开始****

import appuifw

def cn(x):return x.decode("utf-8")

def exit():

appuifw.app.set_exit()

def press():

index = listbox.current()

appuifw.note(cn("哈哈,我是")+list[index],"info")

list = [cn("八神"),cn("米饭")]

appuifw.app.body = listbox = appuifw.Listbox(list,press)

appuifw.app.exit_key_handler= exit

#****代码结束****

点此下载此段代码,下载之后改后缀为.py

讲解:首先我们来看list = [cn("八神"),cn("米饭")]这个,这就是要显示在列表里的文字.中间用逗号隔开.例如:list = [cn("我"),cn("你"),cn("他"),u"China"],注意两边的是中括号[]

下面的appuifw.Listbox(list,press)这里,list就是刚才定义的显示在列表里的文字,然后后面的press就是点击之后的动作:运行press函数.
所以我们定义了press函数:

index = listbox.current()这里是说选中的是列表中的第几个选项.注意:PYTHON都是从0开始计数的.也就是说如果你按的是第一个,这里的listbox.current()其实等于0.这个你不懂没关系,回头就知道了....干嘛呢,没让你真回头,我的意思是说以后你就知道了.

现在知道了当前选中的是第几个,那么就让列表中选中的字显示出来,这里我们用了note这个显示方法,这应该不陌生了吧.现在我们看里面的cn("哈哈,我是")+list[index]这里面的加号.如果你是在用A4的话,那么你要注意不要把+号输成中文的那个大加号,不知道是不是你们的A4也是这样,我的A4在英文状态下输入的那个加号是很大的,那个不行,一定要切换到中文状态下的那个小+号才可以的.注意了这个之后来看list[index]这个,呃,怎么解释呢,list就是刚才定义的那个,后面这个[index]就是说显示列表中的第几个.因为我们已经知道了index等于几,比如list[0]这就是"八神",如果list[1]就是"米饭".现在你自己修改一下吧,把自己的想法通过代码表达出来.下一讲我们要讲解如何做到点击每个选项有不同的动作

这篇应该是相对难懂的,但是我想如果你用心去好好研究的话,应该很快就能明白,原谅我的表达能力.apologize for this.
[发帖际遇]: 飞翔的鱼 发帖时在路边捡到 4 樱币,偷偷放进了口袋. 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:30 来自手机 | 显示全部楼层
[教程]跟米饭学PyS60编程(4.1.1)-使用if语句

3.1.1 选择列表--如何做到点击每个选项有不同的动作

怎么样?上一讲的你都学会了吗?

上一讲的代码中,不管是点八神还是点米饭都是弹出那个哈哈我是**的提示框,现在我们改变一下,点八神的时候出来的是:八神是站长;然后点米饭的时候弹出来:这是米饭教程.呵呵

这里我们需要用到if语句.翻译过来就是如果的意思.

咱们还是不看废话看代码:

#****代码开始****

import appuifw

def cn(x):return x.decode("utf-8")

def exit():

appuifw.app.set_exit()

def press():

index = listbox.current()

if index == 0:

appuifw.note(list[index]+cn("是zntx站长:)"),"info")

elif index == 1:

appuifw.note(cn("这个教程是")+list[index]+cn("写的."),"info")

else:

appuifw.note(cn("QQ/PICA:7716831"),"info")list = [cn("八神"),cn("米饭"),cn("米饭联系方式"),cn("其他")]

appuifw.app.body = listbox = appuifw.Listbox(list,press)

appuifw.app.exit_key_handler= exit

#****代码结束****

点此下载本段代码,下载后改后缀为.py

讲解:

看比上一讲的代码多了什么?就是把press这个函数分为几种情景分别定义.如果按的是第1个则显示什么,如果按的第2个则显示什么,除了这些再显示什么.大致就是这个意思.里面的index的意思在上一讲中已经说了吧.

需要非常非常注意的是:在if语句里等于一定要用两个连着的==表示,这表示等同于,!=表示不等于.还有>= <=之类的以后再说.反正你就一定要记住:if 什么等于什么这里的等于一定是两个等号.
[教程]跟米饭学PyS60编程(4.1.1)-使用if语句
然后里面的elif就是else if(除此之外如果)的意思,else这里也可以继续写成elif index == 2: 因为这里我要让你知道else的意思,所以又在列表中增加了一个"其他",现在看,我们只定义了"八神"和"米饭"这两个提示什么,然后就是除了这两个提示什么(也就是else),所以在你按下"米饭联系方式"和"其他"都会提示在else那定义的动作.这段说的我已经晕了,您慢慢理解.如果你觉得我这点话很费解那就去研究上面的代码,研究几次就明白了.下一讲我们会在这个代码基础上再丰富一下,使它成为一个小软件.你觉得怎么样?或者是做成一个小游戏?
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:31 来自手机 | 显示全部楼层
[教程]跟米饭学PyS60编程(4.1.2)-界面切换

4.1.2 选择列表--界面转换

前面我们说了怎样做选择列表,也说了怎样定义选择列表之后的动作.现在你可能会想,这软件也不能只是点了列表然后弹出个提示框就行了吧?假如我想点了列表之后到文本界面怎么做?那么我们现在就做一个软件,打开后出现选择列表,有两个选项,一是:点击之后进入以前我们学着做的那个编贴助手,然后点第二个列表是弹出作者信息.好.看代码:

#****代码开始****

import appuifw

def cn(x):return x.decode("utf-8")

def exit():

appuifw.app.set_exit()

def editor():

def add():

m.add(cn("\n这是添加文字功能"))

def clear():

m.set("")#括号里面是一对双引号

appuifw.app.body = m = appuifw.Text()

m.set(u"8zntx.com")

m.add(cn("\n米饭教程"))

appuifw.app.menu = [(cn("添加文字"),add),(cn("清除屏幕"),clear),(cn("退出"),exit)]

appuifw.app.exit_key_handler=alist

def alist():

def press():

index = listbox.current()

if index == 0:

editor()

elif index == 1:

appuifw.note(cn("米饭教程"),"info")

list = [cn("进入编贴助手"),cn("关于软件")]

appuifw.app.body = listbox = appuifw.Listbox(list,press)

appuifw.app.menu = [(cn("退出"),exit)]

appuifw.app.exit_key_handler= exit

alist()

#****代码结束****

点此下载本节代码,下载后改后缀为.py

讲解:这段代码比以前更复杂了.我们先看最后这个alist()是什么意思呢.我们可以看出来它没有缩进,说明是这个软件打开直接运行这个函数.我们再看前面,因为我们定义了两个界面:一个是alist,另一个是editor.所以我们就让软件打开之后首先载入alist界面.当然如果你想让程序打开时进入editor界面那就把这里的alist改为editor就好了.
然后alist和editor这两个函数里的代码我们应该不陌生了吧?都是以前我们说过的.但是有一点新东西:
先看alist这里,if index == 0:editor(),这个的意思是如果选择第一个列表,那么就运行editor.这个可能不说你也明白:)
再看editor里面,这个appuifw.app.exit_key_handler=alist就是说在editor界面的时候按右软键是返回到alist界面,而不是退出.
好了,关于选择列表这个界面我们就说到这里,下一讲我们会简单说一下图形界面.
还得说两点:一就是:请仔细的阅读这个教程,不要马马虎虎的看然后想当然的把代码写上,一运行出错,就马上加我QQ问我错在哪里,然后我把代码要过来一看,竟然不是少括号就是多逗号,您说,这是不是有点...
第二是:有人说我代码里有空行,这个是我的习惯,每个单独的部分我都会用一个空行甚至是多个空行隔开,如果都挤在一起那很不方便自己理解,本来手机屏幕就小,容易没思路,如果你代码再乱七八糟的,那岂不是自己受罪?
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:33 来自手机 | 显示全部楼层
[教程]跟米饭学PyS60编程-程序界面(4.1.3)

我回来了.大家久等了

最近很多朋友问如何创建二级菜单,所以现在临时加一节,讲一下二级菜单的创建.

首先来说一下什么是二级菜单?请看图: 点击链接

明白了吧.现在我们来看代码:

#****代码开始****

import appuifw

def cn(x):return x.decode("utf-8")

def exit():

appuifw.app.set_exit()

def submenu():

appuifw.note(cn("二级菜单一"),"info")

def submenu2():

appuifw.note(cn("二级菜单二"),"info")

appuifw.app.body = m = appuifw.Text(cn("按左软键查看"))

appuifw.app.menu = [(cn("一级菜单’),((cn("二级菜单一"),submenu),(cn("二级菜单二"),submenu2),))]

#****代码结束****

点此下载此段代码

讲解:

我们要注意的就是appuifw.app.menu这段代码.我想这里没有太多需要解释的,应该都能看懂了吧.使用的时候就自己往里套就可以,因为我都是这样,自己写的话会被那些括号搞到头晕.呵呵.

要说明一下的是:如果你的二级菜单里只有一项,那么一定要记得在后面加上逗号.就是下面这样:appuifw.app.menu = [(cn("一级菜单’),((cn("二级菜单一"),submenu),))]这里最后面的那个逗号不能省略,否则打开软件之后就会退出,你可以自己试一下.
写二级菜单的时候我经常是这样写:
appuifw.app.menu = [\
(cn("一级菜单"),\
(\
(cn("二级菜单一"),submenu),\
(cn("二级菜单二"),submenu2),\
))\
]
这里你会看到很多\符号.因为我把每一级菜单都单独一行写,这样比较方便修改,由于PY不能随便的换行,所以这里要用\符号来告诉它:这里是和下一行相连的.这是转义符,呵呵.有时候你觉得写在一行太长的话就应该用这个方法来把它们分成N行去写.
那么,如果我们想在一级菜单里再添加退出这个功能怎么办?看代码:
appuifw.app.menu = [\
(cn("一级菜单"),\
(\
(cn("二级菜单一"),submenu),\
(cn("二级菜单二"),submenu2),\
)),\
(cn("退出"),exit)]
新知识就说这些了,说些题外话:
最近些天乱七八糟的事弄的很烦躁,手机不小心掉地上也摔出问题了,手机读不出存储卡了,我拆开检查一下没有发现什么异常,有懂行的朋友请帮个忙:) 现在只能用手机那点可怜的存储来装上PYTHON写教程.
还有以后不要再跟我说什么拜师的事,我现在还是新手,大家一起学习,我还没到为人师那种造诣,所以请免开尊口了.
老规矩,有问题在本帖回复,但是在写代码的时候千万要仔细,不要每次都是弄些少括号之类的低级错误来问.
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:34 来自手机 | 显示全部楼层
[教程]跟米饭学PyS60编程(4.1.4)-文本输入

[教程]跟米饭学PyS60编程-程序界面(4.1.4)

4.1.4 文本输入框

本来想结束这一节直接讲解图片界面的.但是忽然发现还有好多东西没有说.

这一节我们讲一下文本输入相关的.会有很多内容.

1.输入文本并显示出来.

看图片先: 点击链接

弹出一个文本输入框,然后你在里面输入文字,再然后会弹出一个提示框,把你输入的文字显示出来,不好意思截不到图.

现在我们来看代码:

import appuifw

def cn(x):return x.decode("utf-8")

name=appuifw.query(cn("请输入你的名字:"),"text")

appuifw.note(cn("名字是:")+name,"info")

点此下载本段代码

讲解:

第三行的name可以为随便名称,这个应该都明白了吧?这里这个name就等于你输入的内容,

尝试一下把它在文本界面输出.试一下,相信你能成功.

以前我们学过appuifw.query(cn("要退出吗?", "query")这个吧.今天学的不过是把后面

的query改成了text.text的意思就是文本,说明这个询问框是让输入文本.这里text还可

以改成number,意思是在输入框中只能输入数字.自己尝试一下.

有时候可能需要在输入框里预置一些文字,这要怎么做呢?看下面这个代码:

import appuifw

def cn(x):return x.decode("utf-8")

name=appuifw.query(cn("请输入你的名字:"),"text",cn("预置文本"))

appuifw.note(cn("名字是:")+name,"info")

点此下载本段代码

很简单吧,就是在"text"的后面写上你需要预置的文字就可以了.
2.做一个密码输入框
如果用过我做的那个silentmsg的应该知道那个软件在退出的时候需要输入密码,如果输入的是正确的密码就可以退出.
现在来看代码:
import appuifw
def cn(x):return x.decode("utf-8")
def config():
mima=appuifw.query(cn("请输入密码:mifan"),"text")
if mima==u"mifan":appuifw.app.body=appuifw.Text(cn("密码输入正确"))
else:
appuifw.note(cn("密码错误,请重试"),"error")
config()
config()
点此下载本段代码
讲解:
最后面的这个config()应该不陌生吧.进入程序直接读取config这个函数.在config函数里面我们定义了:输入密码,如果输入的密码等于mifan,则在界面显示密码输入正确,否则提示密码错误,并重新读取config函数. 如果不这样做的话,输入错误密码之后只提示错误并不能重新输入密码了.不明白的话自己体会.
现在大家就可以做一个跟密码有关的软件了.呵呵.但是这种加密方式对懂py的人可能没
用.你就要想更变态的加密方式了:)
好了.这一讲就到这里,下一讲再进行一下appuifw函数的扫尾工作.然后就可以讲图形界面了.
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:35 来自手机 | 显示全部楼层
4.1.5 一些其他的形式(一)

1. 双文本输入框

图: 点击链接

代码:

import appuifw

def cn(x):return x.decode("utf-8")

a,b=appuifw.multi_query(cn("姓名"), cn("性别"))

appuifw.note(a+b, "info")

点击下载此段代码

2. 选择列表

图: 点击链接

代码:

import appuifw

def cn(x):return x.decode("utf-8")

def s():

M = [cn("酷牛"), cn("零蛋"), cn("豆包"), cn("火仔")]

index = appuifw.selection_list(choices=M, search_field=0)

if index==0 or index==1:

appuifw.note(M[index]+cn("是好男人"), "info")

else:

appuifw.note(M[index]+cn("是好孩子"), "info")

s()

s()

点击下载此段代码

如果把search_field=0改成=1,就会显示搜索框(在你按键时会显示,就像名片夹里的那个一样),看图: 点击链接

3.复选列表

图:
点击链接
代码:
import appuifw
def cn(x):return x.decode("utf-8")
M = [cn("酷牛"), cn("零蛋"), cn("豆包"), cn("火仔")]
index = appuifw.multi_selection_list(choices=M,style="checkbox",search_field=1)
点击下载此段代码
如果把style="checkbox"改为style="checkmark",选择标记则是对勾.如图所示.由于我在6670上面测试无法显示.不知道是何原因.因此是在 Jurgen Scheible的教程里引用过来的. 点击链接
好了.本节没有太多讲解.要靠大家自己结合着图自己思考了.已经学了这么久,该对py有一些理解能力了
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:39 来自手机 | 显示全部楼层
[教程]跟米饭学PyS60编程4.1.6 一些其他的形式(二)

现在再把appuifw的提示框所有形式总结一下.图文并茂的.就不过多解释.

import appuifw

def cn(x):return x.decode("utf-8")

appuifw.note(cn("提示"),"info")

效果:

import appuifw

def cn(x):return x.decode("utf-8")

appuifw.note(cn("错误"),"error")

效果:

点击链接

import appuifw

def cn(x):return x.decode("utf-8")

appuifw.note(cn("完成"),"conf")

效果:

点击链接

import appuifw

def cn(x):return x.decode("utf-8")

appuifw.query(cn("输入文本"),"text")

效果:

点击链接

import appuifw

def cn(x):return x.decode("utf-8")

appuifw.query(cn("输入数字"),"number")

效果:

点击链接

import appuifw

def cn(x):return x.decode("utf-8")

appuifw.query(cn("输入日期"),"date")

效果:
点击链接

import appuifw

def cn(x):return x.decode("utf-8")

appuifw.query(cn("输入时间"),"time")

效果:

点击链接

import appuifw

def cn(x):return x.decode("utf-8")

appuifw.query(cn("输入密码"),"code")

效果:

点击链接

import appuifw

def cn(x):return x.decode("utf-8")

appuifw.query(cn("确定?"),"query")

效果

点击链接

***弹出菜单

先看一下效果图:
点击链接

代码:

import appuifw

def cn(x):return x.decode("utf-8")

mifan = [cn("米饭教程"),cn("技术群"),cn("米饭QQ")]

c = appuifw.popup_menu(mifan, cn("请选择"))

if c==0:

appuifw.note(u"8zntx.com","info")

elif c==1:

appuifw.note(u"14391384","info")

elif c==2:

appuifw.note(u"7716831","info")

--------

续贴1个附件:

1.popupmenu.py(0K)

点击下载

肯定有人又要问:那怎么能够点一下左选项,然后选择里面的一个菜单弹出来这个呢?好现在看这个代码:

import appuifw

def cn(x):return x.decode("utf-8")

def pop():

mifan = [cn("米饭教程"),cn("技术群"),cn("米饭QQ")]

c = appuifw.popup_menu(mifan, cn("请选择"))

if c==0:

appuifw.note(u"8zntx.com","info")

elif c==1:

appuifw.note(u"14391384","info")

elif c==2:

appuifw.note(u"7716831","info")

appuifw.app.body=appuifw.Text(cn("按选项查看"))

appuifw.app.menu=[(cn("弹出菜单"),pop)]
--------
续贴1个附件:
1.func_popupmenu.py(0K)
点击下载
最近有点忙,更新的稍微慢一点,大家原谅.希望大家在看贴之后能受累回一下,不然我真不知道我写这个有多少人在看,是不是应该继续写.不强求您回贴,但是还是希望能回一个:)
本部分到此结束.下一讲4.2要讲图形界面了...
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:41 来自手机 | 显示全部楼层
本帖最后由 飞翔的鱼 于 2012-1-24 22:43 编辑

评 论 [教程]跟米饭学PyS60编程(4.2)-图形界面

4.2 图形界面

想必大家学以前的那些东西都腻了吧.现在开始咱就学新东西了.但是你要做好心理准备,新东西可是越来越复杂了.而且我也会尽量少的讲解,以留给大家自己动脑的空间.还有,在进入新课之前你要确保以前的东西已经掌握,不然在学习中遇到由于基础不扎实造成的问题我可不会帮你解决的哦.一定要把基础打好.不要企图还不会走就跑.那样摔的是自己哦.好了,废话不说了.咱们先看一个图. 点击链接

这个图是我自己用代码画的.里面包含了矩形,线条,圆形,椭圆,文字.现在我们来看一下它的源码:

import appuifw

import e32

from graphics import *

def cn(x):return x.decode("utf-8")

ziti=u"CombinedChinesePlain12"

def exit():

global running

running=0

appuifw.app.set_exit()

appuifw.app.screen="full"

img=Image.new((176,208))

img.clear(0xe0e0ff)

img.rectangle((10,30,20,100),0xff0000,fill=0xff0000)

img.line((20,100,40,100),0xff0000)

img.point((60,65),0xff0000,width=40)

img.ellipse((40,30,80,100),0x0000ff)

img.line((90,30,100,100),0xff0000,width=10)

img.line((100,100,110,30),0xff0000,width=10)

img.line((130,30,130,100),0xff0000,width=10)

img.line((130,30,150,30),0xff0000,width=10)

img.line((130,65,140,65),0xff0000,width=10)

img.line((130,100,150,100),0xff0000,width=10)

img.text((60,130), cn("米饭教程"),0x333333,ziti)

def handle_redraw(rect):

canvas.blit(img)

appuifw.app.body=canvas=appuifw.Canvas(event_callback=None, redraw_callback=handle_redraw)

appuifw.app.exit_key_handler=exit

running=1

while running:

handle_redraw(())

e32.ao_yield()

点击下载此段代码

哎呀,好长的代码啊.
怎么讲解啊.一点一点的说吧.

首先我们来看最开始,import appuifw和e32两个模块.然后第三行的from graphics import * 这个的意思就是从graphics模块中引进所有变量.说这样你可能不懂.通俗一点,大家还记得以前写代码都是import appuifw然后下载都是appuifw.app.menu=...等等的吧.如果我们使用了from appuifw import *之后就应该写成app.menu=... 最简单的理解就是省的每次都写这个appuifw.了.但是普遍的说法都是:一般说来,应该避免使用from..import而使用import语句,因为这样可以使你的程序更加易读,也可以避免名称的冲突。(引自:简明 Python教程/第8章 模块/from..import语句) 但是这里的from graphics import * 我见过的绝大多数代码都这么写.因此我也就养成这习惯了.都是from.呵呵.大家也就照着这么写吧.

再下边的ziti=u"CombinedChinesePlain12"这个是定义ziti等于中文12号字体.下边会用到,先不说.记住这回事就可以了.

img=Image.new((176,208))这个是定义img为新建一个176*208的图片.冰雪大哥曾经提醒过我在写代码时候不要用这样的定值,因为有的机器屏幕大小不是176*208,以后咱们会学到如何定义这个值为屏幕大小.现在先不说.

img.clear(0xe0e0ff)这个我不知道是什么意思,但我知道它是设置图片的背景颜色用的.如果想背景是黑色就img.clear(0)就可以.里面的0xe0e0ff就是背景颜色的值.

img.rectangle((10,30,20,100),0xff0000,fill=0xff0000)这个的rectangle是画矩形.后面的数字依次是:矩形左上顶点的x坐标(也就是和屏幕最左边的距离),y坐标(和屏幕顶端的距离),矩形右下顶点的x坐标,y坐标. 0xff0000是矩形的边框颜色.fill=0xff0000是矩形内部的填充颜色.

img.line((20,100,40,100),0xff0000)这里的line是画线.后面的数字依次是:线条的端点X坐标,Y坐标,另一端点的x坐标,y坐标.

这样定义的线条是一细线条,如果想定义线条粗细的话就这样写:img.line((90,30,100,100),0xff0000,width=10)后面的width=的值就是粗细了.

img.point((60,65),0xff0000,width=40)这里的point是点的意思.也就是一个实心圆.里面的60,65是圆心的X,Y坐标.width=的值就是直径.

img.ellipse((40,30,80,100),0x0000ff)这里的ellipse的意思是椭圆.这里的四个值我不知道怎么解释...大家自己体会吧.你可以改一下里面的值感觉一下.我不知道那术语该怎么讲.有高中数学学的好的朋友请指点.后面的颜色是边框颜色,如果想填充颜色就这么写:img.ellipse((40,30,80,100),0x0000ff,fill=0x0000ff)

img.text((60,130), cn("米饭教程"),0x333333,ziti)这是在上面写字的.数字是文字左下角的X,Y坐标.注意是左下角.如果你写成0,0的话那字就显示不到屏幕上了. 后面跟的是要写的文字.再后面是文字的颜色.再后面的ziti大家应该明白了吧.就是说这段字要用上面定义的中文12号字.为什么要这样做呢?听我详细说来,因为我们写在这里的字是中文字,如果代码在没有装字库的手机上运行时会出现大家比较熟悉的口口.但如果写的是英文字的话就不会口口.因此这里我们要定义一下它的显示字体.看一下在我这个没装字库的手机上的口口效果: 点击链接

继续:

def handle_redraw(rect):

canvas.blit(img)这里是定义了重画的功能,就是为了让图片一遍一遍的在上面出现,不然的话只闪一次就变没了.这些东西你可以不必理解.只要用的时候往过复制就可以了.我都是这样做.嘿嘿.

appuifw.app.body=canvas=appuifw.Canvas(event_callback=None, redraw_callback=handle_redraw)这里是定义程序界面为canvas(画布).然后括号里面定义了一些返回动作.具体意思我也是一知半解中,在以后的学习中会明白的.
反正现在就这么写就是了.

running=1 是定义running为1.为什么要定义它为1呢?

下边的while running:的意思就是while 1: 其实这样写也是可以的.这个意思就是说在运行时.但是如果只写成while 1:的话,就无法定义停止了.听不懂没关系.不懂装懂吧.以后就懂了.

handle_redraw(())上面已经定义了说一遍一遍的画图.就是说在运行的时候一遍一遍的画图:)

e32.ao_yield()这里这个必须要写.如果不写这个的话程序就一直在那画啊画啊,根本不理会你按键,按退出它也不会理你,依然是在那画啊画啊画啊.强退都退不掉.只能疯狂的关才可以关掉或者用APPMAN强行关.但是定义了这个e32.ao_yield()之后,它在画啊画啊的同时会注意到你是不是在按退出键,因此你按了退出之后它就会很听话的关闭了.

我的天啊.不知不觉写了这么多.感觉是有点累了.最近玩电脑弄的肩膀非常疼.哪位有什么好点的办法麻烦告诉我一下.疼的真是很难过.睡觉了
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:46 来自手机 | 显示全部楼层
[教程]跟米饭学PyS60编程(4.3)-折叠界面

先看个图: 点击链接

我们看见这个图上面有一和二两个界面可以切换(其实有四个).如果按向左键就可以切换到上一个界面,按向右就可以切换到下一界面,在界面上也会显示相应的内容.

现在来看代码:

!!!!!!!特别注意:由于论坛不能正常显示缩进,因此以后的代码中用++++代替空格,有几个+号就说明这里是有几个空格.一定要注意.请不要因为不懂这个+号是什么来问我.

import appuifw

def cn(x):return x.decode("utf-8")

page1 = appuifw.Text(cn("界面一"))

page2 = appuifw.Text(cn("界面二"))

page3 = appuifw.Text(cn("界面三"))

page4 = appuifw.Text(cn("界面4"))

def exit():

++++appuifw.app.set_exit()

def action(index):

++++if index == 0:

++++++++appuifw.app.body = page1

++++if index == 1:

++++++++appuifw.app.body = page2

++++if index == 2:

++++++++appuifw.app.body = page3

++++if index == 3:

++++++++appuifw.app.body = page4

appuifw.app.set_tabs([cn("一"), cn("二"), cn("三"), cn("四")],action)

appuifw.app.title = cn("米饭教程")

appuifw.app.body = page1

appuifw.app.exit_key_handler= exit

点击下载此段代码,已修正 注:以前的这个文件里面的代码也是正确的,只是我是在电脑上写的,可能是里面的TAB符号手机识别不出来.需要在手机上用文本编辑器重新保存一下.
讲解:

我们在开始定义了page1到4都等于什么.由于这是教程,因此就简单的设置了每个界面都是显示文字.下一讲会讲解一下稍微复杂的应用.

下面的appuifw.app.set_tabs([cn("一"), cn("二"), cn("三"), cn("四")],action)我们定义了四个界面的名字,后面的action是动作.我们在上面定义了action.如果切换到第0个界面怎么样,切换到第1个界面怎么样之类的.这个其实跟那个选择列表差不多的.

后面的appuifw.app.body = page1定义了软件启动之后默认打开哪个界面.

好这个代码就这样了.你可以尝试一下把每个界面变成不同的样子,例如把界面一定义为文字界面,界面2定义为图形界面,界面3定义为选择列表等等.但是我记得好像界面多了之后会有显示不出来的BUG.我不知道是什么原因,因此如果你遇到显示不出来图形界面的问题就不用问我了.如果哪位知道原因还烦请赐教.

-----题外话----

也写了几篇教程了,首先感谢大家的支持很关心.我这个教程肯定会写下去的,这请放心.

但是最近一些事情让我有点不开心,首先我写这个教程是我利用我的空闲时间写出来的,这只是我的兴趣,而不是我的工作,因此我没有义务每天更新.由于最近没有以前那么清闲,更新速度慢了一点,所以有些朋友就有点...还请谅解,我有我的生活,总不能因为爱好而放弃了生活吧,那我吃什么喝什么?

还有就是,如果你迫切想知道哪个功能怎么用,但是我这个教程还没有讲到.你可以去GOOGLE搜索一下,例如你想知道如何使用PY的联网功能,你可以去搜索PYTHON 联网或者 PYS60 networking等等.因为我这个教程已经有我自己的思路,总不能今天讲这个明天讲那个吧.还是得请大家谅解.其实到现在这样大家都已经入门了,完全已经可以独立思考了.

这里跟大家分享一下我的学习经验:我最开始接触PY根本没有看过教程,完全就是看别人的软件代码然后自己摸索它的功能,
一遍一遍的尝试以达到自己要的效果,经常为了某个简单的功能不知不觉的尝试到天明.因此到现在我可以写这个教程.我最开始学的时候那些软件还都是完全没有加密的,就是说没有编译成PYC文件,这样就给我这个新手很好的机会去学习,去认识更多的代码,但是后来有些人把别人的软件直接改个开发者的名字就说是自己开发的,这伤害了很多开发者的心,因此现在的代码越来越难懂,加密方法也越来越多.所以这里我提醒一下大家,可以借用别人的代码来实现某个功能,但是不要直接把人的名字一改就说是自己的,连原作者的名字都不署,这是很无耻的行为...好像说跑题了.学习经验就是看代码,看尽量多的代码.这样就会很快的进步了.
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:52 来自手机 | 显示全部楼层
评 论 [教程]跟米饭学PyS60编程(4.3.1)-折叠界面补充
由于大家很着急知道文本处理的代码,因此折叠界面这节被跳过去了,现在回来继续说.呵呵

4.3.1-折叠界面补充

其实这节还是折叠界面的代码,只是增加了一些新鲜的东西.

先看图:

界面一: 点击链接

界面二: 点击链接

界面三: 点击链接

上一讲的几个界面全部都是文本输入的界面,这次第一个界面加上了图标的Listbox.第二个界面是文本界面,第三个界面是图形界面.看代码:

import appuifw

from graphics import *

def cn(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)

icon3 = appuifw.Icon(u"z:\\system\\data\\avkon.mbm", 30, 31)
icon4 = appuifw.Icon(u"z:\\system\\data\\avkon.mbm", 32, 33)

icon5 = appuifw.Icon(u"z:\\system\\data\\avkon.mbm", 34, 35)

icon6 = appuifw.Icon(u"z:\\system\\data\\avkon.mbm", 36, 37)

icon7 = appuifw.Icon(u"z:\\system\\data\\avkon.mbm", 38, 39)

list = [(cn("信号"), icon1),

(cn("电池"), icon2),

(cn("G"), icon3),

(cn("已经联网"), icon4),

(cn("联网断开"), icon5),

(cn("信号条"), icon6),

(cn("电量条"), icon7)]

def action():

    appuifw.note(cn("米饭教程"),’info’)

app1 = appuifw.Listbox(list,action)

app2 = appuifw.Text(u’HappyNew Year’)

def app_3():

    img=Image.new((176,208))

    img.rectangle((20,10,150,150),0)

    img.point((50.,150.),0xff0000,width=40)

    img.ellipse((100,150,150,180),0x0000ff)

    img.text((40,80), cn("广告位招商"),0x0000ff,u"CombinedChinesePlain12")

    def handle_redraw(rect):

        canvas.blit(img)

    canvas=appuifw.Canvas(event_callback=None, redraw_callback=handle_redraw)

    appuifw.app.body = canvas

    appuifw.app.menu=[(cn(’示范目录’),lambda:appuifw.note(cn(’正常’),’info’))]

def exit_key_handler():

    appuifw.app.set_exit()

def handle_tab(index):

    if index == 0:appuifw.app.body = app1

    if index == 1:appuifw.app.body = app2

    if index == 2:app_3()

appuifw.app.set_tabs([cn("界面一"),cn("界面二"),cn("界面三")],handle_tab)

appuifw.app.title = cn(’折叠界面’)

appuifw.app.body = app1

appuifw.app.exit_key_handler= exit_key_handler
讲解:

先说一下定义的那些icon(图标).appuifw.Icon(MBM文件路径, MBM中图片位置1, 2)

玩机比较多的人应该知道mbm是由很多图片组成的,这里为什么要用到两张图片呢?我的理解是有一张是蒙板.如果你自己要做这样的mbm文件的话,请去网上搜索mbm制作教程,本教程不讲解.

然后下面定义的list与以前的定义方法有所不同,因为多了图标,注意其格式就好了.

下面也没有什么需要讲解的.

需要注意的是:由于我们只是在app_3里面设置了目录选项(menu),而前两个界面没有设置,因此我们在刚刚进入软件的时候是看不到目录选项的,只有切换到了app_3之后,软件才加载了menu,然后切换回前两个界面的时候,还是可以看到这个目录.为什么在app_3里定义的目录到app2界面还是能够显示呢?因为app2里面没有设置目录嘛.呵呵,如果你想让每个界面都有独立的目录,那就在定义每个界面的时候也同时定义menu就可以了.

本来想继续写一下表格(form)的教程,但是忽然发现这个东西还挺深奥,刚研究完.明天再写教程吧.
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:54 来自手机 | 显示全部楼层
[教程]跟米饭学PyS60编程(5.1)-文本处理

最近写D8的0.2版本时间很紧,但是大家的热情让我不得不拿点时间出来写教程.闲言碎语不用讲...

5.1 文本文件的读写

在以前的课程中我们学习了如何做一个编贴助手类似的软件,大家应该都可以写出来这样的一个软件了吧?

但是缺少一个很重要的功能,就是把界面上的字保存下来.

今天我们就来学习如何读写文件.

代码:

import appuifw

def cn(x):return x.decode("utf-8")

appuifw.app.body=m=appuifw.Text()

def save():

++++if appuifw.query(cn("要保存当前内容吗?"),"query"):

++++++++text=m.get().encode("utf-8")

++++++++f = open("e:\\mifan.txt", "w")

++++++++f.write(text)

++++++++f.close()

++++++++appuifw.note(cn("成功保存到e:\\mifan.txt"),"conf")

def load():

++++try:

++++++++z = open("e:\\mifan.txt","r")

++++++++content = z.read().decode("utf-8")

++++++++z.close()

++++++++m.add(content)

++++except:

++++++++appuifw.note(cn("未找到文件"),"error")

appuifw.app.menu=[(cn("保存"),save),(cn("读取"),load)]

点击下载本段代码

讲解:

首先来看save函数:

if appuifw.query是提示是否保存.

text=m.get().encode("utf-8")这里的m.get()的意思是get m上面的内容,也就是获取m界面上的文字,m界面是什么?这都不知道,前面白学了吧.上面不是定义了appuifw.app.body=m=appuifw.Text()嘛!然后后面的.encode("utf-8")则是把获取到的文字以utf-8编码.为什么必须要编码呢?我这里不太权威的给你个说法:界面上的中文好像是以utf-8编码的.如果不加这个编码,可能保存会失败.
f = open("e:\\mifan.txt", "w")这个是以写入模式打开e:\\mifan.txt文件,这里的w的意思就是write写入.如果不存在这个文件则自动创建.

f.write(text)就是写入上面定义了的text的内容

f.close()意思是关闭文件.文件操作完毕,一定要记得f.close()文件从而释放资源供其他程序使用.以前我就不知道这个,造成错误.呵呵.大家注意.下面来讲load函数:

这里用到了try except语法,我不记得以前讲过没有.意思就是:试图(try)做某事,如果不可以的话(except)则怎么做.我们这里就是试图读取文件,如果没有此文件的话则提示未找到文件.

z = open("e:\\mifan.txt","r")以只读模式(r)打开文件

content = z.read().decode("utf-8")里面的z.read()是读取z文件里面的内容,解码为utf-8

z.close()关闭文件,一定别忘了哦.

m.add(content)则是把刚才读取到的内容add到界面上.打开文件的模式还有很多,例如:

"r":只读(缺省.如果文件不存在,则提示错误)

"w":只写(如果文件不存在,则自动创建文件)

"a":附加到文件末尾,也就是追加

"r+":可读可写

大家可以自己尝试一下这些模式.好,本讲到此结束
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:56 来自手机 | 显示全部楼层
[教程]跟米饭学PyS60编程(5.1.1)-文本处理1

啊,终于把D8的0.2版本写完了,明天内测一下就可以发布了.通过写这个又增加了不少知识.

今天来进一步学习一下文本处理.

5.1.1-文本处理1

上一节我们学了保存文本,夕花朝拾朋友做的那个PY日记本真的很不错,加油!

下面的代码大家需要在PY解释器里查看效果.具体方法是:

打开PYTHON; 选项; interactive console;然后可以看到>>> 这样开始的行.现在我们在上面写上:(>>> 不要写)

>>> print "Hello World"

然后按确定键(中心键)就会在下一行出现Hello World.看图: 点击链接

好,明白了怎么使用之后我们来学习代码:

>>> a=u"0123456789mifan"

>>> a[0]

u"0"

讲解:

a=u"0123456789mifan"这里我们定义了a等于后面这个字符串;

a[0]的意思就是返回a字符串里面的第一个字符(以前好像说过了吧,python是从0开始计数的). 那么我们要返回第10个字符应该怎么做呢?

对,键入a[9]就可以了.看一下效果: 点击链接

你可能会问了,如果我想要获得最后一个字符的话,那我还要数一下总共多少个字符啊.如果是一段文字的话这可够累的啊,呵呵.没关系,我们来看:

>>> a[-1]

u"n"

明白了吧. -1就是倒数第一个的意思.倒数第二个就是-2咯.
如果真的想知道这字符串有多少个字符应该怎么做呢?

>>> len(a)

15

先说说这个len的意思,len是length(长度)的意思.

这里返回了一个整数(integer)15.就是说a字符串有15个字符(strings).这里我加了一些英语,大家应该记住,以后有用,而且这是编程必须懂得的东西.

现在我们懂得了如何获取单个字符了,但是在实际应用中我们不能只要一个字符吧,肯定还有需要这个字符串里面某一段字符串.来看:

>>> a[0:10]

u"0123456789"

现在我们看到,返回了一个包含10个字符的字符串.[]中括号里面的数字是 [要获得的字符串开始:结束].一般情况下,这个0可以省略,也就是说: a[:10]和a[0:10]的效果是一样的.还有,字符串的末尾也可以省略,例如我们想获得从11到结束的字符串就可以写: a[10:] 这和a[10:15]的效果是一样的.大家可以自己多试一下,例如a[:],a[8:13],a[5:-5]这样的组合.

>>> a[5:8]+a[6:9]

u"567678"

这种表达在实际操作中会经常用到.例如在写文件的路径的时候: u"e:\\system"+u"apps". 但是要注意这里的+并不是像数学运算的那种加一样,这应该算是组合的意思.不可以用-的哦.呵呵.没见过用字母减字母吧....

本来想再写点的,但是发现了一个D8的BUG.需要修正.只能快点结束了.

现在我们来说一点:上面这些代码怎么应用到实际中呢?

例如我们在appuifw.app.body=m=appuifw.Text()这样的界面上.

import appuifw

def cn(x):return x.decode("utf-8")

def test():

te=m.get()

m.add(cn("这个")+te[2:4]+cn("是")+te[0:2]+cn("写的"))

appuifw.app.body=m=appuifw.Text()

m.set(cn("米饭教程\n"))

appuifw.app.menu=[(cn("效果"),test)]

点击下载本段代码

具体我就不解释了,大家自己体会.
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:58 来自手机 | 显示全部楼层
[教程]跟米饭学PyS60编程(5.1.2)-文本的替换,分割,查找

唉,米饭啊米饭啊,怎么还不更新.唉,你以为我不想更新啊,但是最近心情不太high,体温却是很high,感冒难过的紧.

开始:

(5.1.2)-文本的替换,分割,查找

文本的替换:

很简单:用replace就可以,这就是替换的意思.用法:

假如现在appuifw.app.body=m=appuifw.Text()上面有如下字符:

mifan教程,网址,mifan是摇滚mifan

我们这里要把里面的所有mifan替换为中文"米饭".然后再写上去.看代码:

m.set(m.get().replace("mifan",cn("米饭")))

把这段代码分开来写:

a=m.get()

b=a.replace("mifan",cn("米饭"))

m.set(b)

明白了吧,replace后面的括号里是(要替换的字符,替换为)

这里只是单个替换,如果想替换多个呢?那就一个一个的堆.

b=a.replace("mifan",cn("米饭")).replace(cn("网址"),u"8zntx.com")

就是这样简单.

文本的分割

什么是分割呢?比如我们有这样一段文字:

摇滚|米饭|写|教程

这个假如是保存在:e:\\test.txt中.现在:

f=open("e:\\test.txt","r")

t=f.read().decode("utf-8")

f.close()

p=t.split("|")

这里用的就是这个split

现在我们得到的p就是["摇滚","米饭","写","教程"]

假如我们想把其中第2个返回在界面上,就可以

m.add(p[1]) 这个以前我们好像学过吧.

关于这个的详细使用大家可以下载本文后面那个小代码

文本的查找:

我们这里简单的讲一下文本的查找.在界面上有一堆字,然后我们要查找某字,这个你可以用appuifw.query来定义.然后查到到这个字并把光标放到这个字的前面.

m.get().find(要查找的字符或字符串),这样返回的是一个integer整数.

我们把它定义成pos=m.get().find(要查找的字符或字符串)

然后m.set_pos(pos)就会自动把光标放到这个查找结果前面了
那么比如:有一段文字:<url=http://8zntx.com/bbs/book_view.asp?pageback=1&id=21797>返回目录</url>

现在我们想获取其中的地址,并set在界面上.

links=u"<url=http://8zntx.com/bbs/book_view.asp?pageback=1&id=21797>返回目录</url>"

st=u"<url="

begin=links.find(st)

end=links.find(u">")

begin += len(st)

text=links[begin:end]

m.set(text)

注意:这段代码我写完没有测试,觉得可以行,如果不可以的话请参考我在本文后面给出的:*zntx编贴助手代码*

具体我就不讲解了,自己悟吧,也不能总是这么清楚的讲了,得养成独立思考的好习惯.

好了.后面我给出我刚才写的一段代码.下载完放到软件里运行,不会运行的可以从头再学了.

然后还有一份我写的ZNTX编贴助手,大家可以学习一下,但是请不要把这个代码直接拿来说是自己开发的哦.

好了,感冒发烧.不多说了,感谢所有支持我的兄弟,如果有姐妹支持我就更好嘞.嘿嘿.

晚安大家.不要熬太晚哦,睡个好觉再看这个教程会别有一番味道哦.

真的不说了....
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 22:59 来自手机 | 显示全部楼层
评 论 [教程]跟米饭学PyS60编程(5.1.3)-打开、保存指定文件
1、读取指定名称的文件
这只是最基本的方法(其实就是笨方法),但是,有的时候可能会用到。
import appuifw,os
def _open():
++++d=appuifw.query(u"e:\\","text")
++++dire=u"e:\\"+d
++++appuifw.note(u"selected:"+dire,"conf")
++++if not os.path.exists(dire):
++++++++appuifw.note(u"But this file doesnot exist","error")
++++else:m.set(dire)
appuifw.app.body=m=appuifw.Text()
appuifw.app.menu=[(u"open",_open)]
讲解:
首先引入os模块,这个模块提供的功能多数是关于系统的,以后我们会一一详解。今天我们用到的功能是判断指定的路径是否存在。即:os.path.exists(给定路径),在平时使用中,经常结合if语句使用。例如例码中:if not os.path.exists(dire):意思是:如果不存在此路径,则…,这里的not的意思是不;我们还可以说if os.path.exists():如果存在此路径,则…。如果我们在python解释器里运行:
>>> import os
>>> os.path.exists("e:\\a")
0#不存在则返回0
>>> os.path.exists("e:\\data")
1#存在即返回1
这里所说的路径可以是文件,也可以是文件夹。
有时候可能需要一个功能,对,如果不存在,则创建这个文件夹,需要这样写:
d="e:\\mifan"
if not os.path.exists(d):os.mkdir(d)
这里,mkdir就是make dir(创建文件夹)的意思。删除的话是rmdir()。好,关于os就先大致说这些,以后再详细讲。
上面例码中,提示输入文件名,然后把用户输入的用户名加上"e:\\"就是要打开的路径了
然后就可以open(dire),之后read或write。如何打开读取和保存就不说了,如果你还不知道请见本教程5.1。
2、选择文件打开
这个在6.1播放声音里有讲。下面我给出一个样例,可以结合教程6.1研究。
import appuifw,powlite_fm
file=powlite_fm.manager().AskUser()
appuifw.note(u"selected:"+file)?好了,这一讲就讲到这里。回头我再写一个,默认保存为s1.txt,如果有了s1就保存为s2。还得想想。呵呵。坐车。回见。
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 23:01 来自手机 | 显示全部楼层
[教程]跟米饭学PyS60编程(6.1)-播放声音

文本那节就先到那里,以后有需要加的再加.现在完全没有头绪,不知道该写什么,可是该写的又很多,苦恼.

6.1 播放声音

这里我们需要使用的模块是audio模块,在system\\libs文件夹你可以找到它.pys60 api中关于audio的说明是:audio模块可以播放和录制声音,还可以使用机带的朗读文本引擎(部分手机可能没有这个功能).此模块支持所有本机支持的音频格式,包括:.wav,.amr,.midi,.mp3,.aac和RealAudio.

现在我们来看一个小脚本,是个简单的播放器.(注:每行开头的+代表一个空格)

import appuifw

import audio

import powlite_fm

def cn(x):return x.decode("utf-8")

appuifw.app.body=sp=appuifw.Text(cn("按选项选择歌曲播放\nthx."))

def playsound():

++++global soundfile

++++appuifw.app.menu=[(cn("停止"),stop)]

++++soundfile=powlite_fm.manager().AskUser("e:\\sounds\\",ext=[".mp3",".wav",".amr",".wma"])

++++S=audio.Sound.open(soundfile)

++++run=1

++++sp.set(cn("正在播放:")+soundfile)

++++while run:

++++++++S.play()

def playagain():

++++appuifw.app.menu=[(cn("停止"),stop)]

++++S=audio.Sound.open(soundfile)

++++run=1

++++while run:

++++++++S.play()

def stop():

++++global run

++++appuifw.app.menu=[(cn("播放"),playagain),(cn("重新选曲"),playsound)]

++++sp.set(cn("停止播放")+soundfile)

++++run=0

++++S.stop()

appuifw.app.menu=[(cn("选曲播放"),playsound)]

点击下载此段代码

讲解:

首先我们看import进来两个陌生的模块:audio模块负责音频处理,后面这个powlite_fm是俄罗斯高手写的一个文件管理器类似的东西,使用它我们可以选择文件之后得到文件的路径以便打开用.

然后来看playsound()这个函数,首先这个global soundfile是说明之后我们定义的soundfile值是全局的(也就是说在每个单独的函数里都可以用).
后面soundfile=powlite_fm.manager().AskUser("e:\\sounds\\",ext=[".mp3",".wav",".amr",".wma"])这里我们定义了soundfile等于什么.我们看这里首先有powlite_fm.manager().AskUser()这样,这说明我们用的是powlite_fm里的manager函数里的AskUser.不知道在说什么吧?不知道无所谓,反正记住这段代码就可以,一定要记住哦,以后可是会经常用到.注意括号里面的格式:(默认读取路径,ext=["需要的文件后缀"]).如果你不需要自动到默认读取路径可以这样写:powlite_fm.manager().AskUser(ext=[".mp3"])这样就不会打开默认到sounds文件夹了.现在我们定义了soundfile等于使用者选择的文件路径.假如你在sounds文件夹选择了"国际歌.mp3"这首歌,那么就是:soundfile="e:\\sounds\\国际歌.mp3"

然后下面我们定义S等于audio.Sound.open(soundfile),就是说打开这个声音文件,但是现在还不会播放.要播放的话就需要S.play(),要停止就是S.stop()

我们看后面为什么要加上while语句呢?这个问题我很困惑,在我的6600上面播放声音直接S.play()就可以,但是在6670上面直接用S.play()的话就会出现只播放几秒或者根本无声,所以我只能在这里加个循环,就是说在没有选择停止之前一直播放,下下策,希望哪位知情人士提示在下.

后面我们看定义playagain().这是定义的继续播放上次选择的歌曲.由于soundfile是被全局定义过,因此直接拿来用就可以.不用再提示选择文件了.

下面我们定义了停止的函数:def stop():

直接加个S.stop()就可以了.我为了让大家多了解点知识,所以在里面加上了set到文本界面的功能.对了,还定义了那个循环为0,就是让循环停止,不过好像没什么作用.不加也可以.

最后的这个munu其实也可以放在前面,知道放在哪里吧?就是放在appuifw.app.body=sp=appuifw.Text(cn("按选项选择歌曲播放\nthx."))这个的下一行...应该是这样 你试试看哦.

好,讲完了,但是大家要注意一下这段代码里面各个函数里menu的用法,在不同的环境下有相应的选项,很实用.

之后我们会慢慢的把这个做成一个很好玩的播放器,呵呵.呆着没事你自己也研究研究哦.希望能给未来的天才程序员一点启蒙的作用,那在下将倍感荣幸.嘿嘿.晚了,安了.
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 23:02 来自手机 | 显示全部楼层
[教程]跟米饭学PyS60编程(6.2)-播放声音2

好久不见.

在阅读此节之前请先将[url=http://8zntx.com/bbs/book_view.asp?pageback=1&id=63055&sid=58d32f806c5f8f6g_ftinyun12_56135__139560此节[/url]看完.

上一讲我们简单的说了播放声音.今天我们再详细说一下.

在技巧篇1里我们知道了怎么查看一个模块中的所有函数.现在我们就来看一下:

在py解释器里运行:

>>> import audio

>>> dir(audio.Sound)

["__class__", "__delattr__","__dict__", "__getattribute__","__hash__", "__init__","__module__", "__new__","__reduce__", "__repr__","__setattr__", "__str__","__weakref__", "_say", "close","current_position","current_volume", "duration","max_volume", "open", "play","record", "set_position","set_volume", "state", "stop"]

>>>

我们就来了解一下这些函数的功能.注意一下,下面代码中的S是上一讲中的S=audio.Sound.open(soundfile).这里就不再重复写这段了

1.调节音量

S.current_volume()#返回当前音量,0-9

S.max_volume()#返回最大音量,我测试几次都是9

S.set_volume(X)#设置音量为X.括号中的X为0-9任意数字(0为静音,9为最大音量)

2.播放时间

S.duration()#返回当前音频长度,格式为300000000L这样的值.我不知道什么意思

要将此值转换成时间格式用如下代码:

du=(S.duration())/100000

str(du/600)+":"+"%02d"%(du%600/10)+"."+str(du%600)[-1]

此段代码摘自MP3编辑软件,对原作者表示敬佩和感谢.

S.current_position()#当前播放时间.同样返回上面的数值.同样处理方法

S.set_position(X)#设置播放位置为X.X值同300000000L样的值.
3.录音功能

在我的6600上面测试可以录amr和wav格式的声音.效果不错.而且最出色的是:如果已经存在此名称的声音文件,则追加声音,就是继续录,而不会覆盖以前的声音.great!

s=audio.Sound.open("e:\\mifan.wav")#要保存的文件路径,如果不存在此路径会自动生成,如果已经存在此文件则追加声音,后缀名可以为amr,wav,mp3请自测.

s.record()#开始录音,现在就对着MIC唱歌吧.

s.stop()#唱够了就可以停止录音了.

s.play()#听一下效果吧.

如果想接着录的话就再s.record()

4.其他

S.state()#返回数字: 0:声音对象被建立,但是没有音频打开; 1:停止; 2,正在播放; 3:正在录音

S.stop()#关闭音频文件

下面是我坐火车打发时间写的一个小播放器.简单的要死.不过音量条做的很细致.大家可以拿去用,但是请在软件中注明.谢谢.还有就是那些变换颜色的线条,呵呵,很仿真吧.

点击下载

效果图: 点击链接
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 23:04 来自手机 | 显示全部楼层
[教程]跟米饭学PyS60编程(技巧篇)-1. 如何知道某个模块的功能

首先、我们必须要充分利用python解释器里的interactive console(交互控制台)这个功能。

在控制台输入如下

>>> import appuifw

>>> dir(appuifw)

["Canvas", "Content_handler","EEventKey","EEventKeyDown","EEventKeyUp","FFormAutoFormEdit","FFormAutoLabelEdit","FFormDoubleSpaced","FFormEditModeOnly","FFormViewModeOnly", "Form","HIGHLIGHT_ROUNDED","HIGHLIGHT_SHADOW","HIGHLIGHT_STANDARD", "Icon","Listbox", "STYLE_BOLD","STYLE_ITALIC","STYLE_STRIKETHROUGH","STYLE_UNDERLINE", "Text","__all__", "__builtins__", "__doc__","__file__", "__name__", "_appuifw","app", "available_fonts", "e32","multi_query","multi_selection_list", "note","popup_menu", "query","selection_list"]

还有,假如我们想知道appuifw.app这里面都有什么该怎么办?

>>> dir(appuifw.app)

["activate_tab", "full_name","set_exit", "set_tabs", "uid"]

>>>

看见了吧,就是这样咯。

还有直接输入dir()就会返回当前已经import的模块

还有一个非常好的方法,那就是看PythonForS60_1_4_2_doc,是NOKIA发布的所有PYS60内置模块的使用说明,我都是看英文版,不知道有没有中文版的。是个PDF文件,需要用电脑看。

我认为,学习任何东西都必须勤,勤动手,勤动脑,但是尽量少动口,因为问来的总没有自己研究出来的记忆深刻。所谓的,纸上得来终觉浅,绝知此要躬行,就是这个道理吧。
最后希望大家能够积极创造和谐的wap网络环境,

少一些病毒,多一些技术;

少一些漫骂,多一些尊重;

少一些剽窃,多一些共享;

少一些低俗,多一些素质。

这样,会有更多的人喜欢wap网。

这样,wap网会有更多生机。

敬告所有转载本教程的朋友:转载时请保留所有原始文字和连接,请保留作者姓名。转载时欲对本教程做任何改动请联系作者,谢谢。作者保留一切对本教程的权利。

返回目录PyS60说明文档.需要用PDF阅读器打开
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 23:06 来自手机 | 显示全部楼层
[教程]跟米饭学PyS60编程(技巧篇)-2. 如何找出代码中的错误

最近很多朋友问我代码是哪里错了.现在告诉大家一个办法.

我记得我写过一篇这样的教程的,但是找了半天没有发现.如果谁知道在哪个帖子里麻烦告诉我哦.

其实要知道代码是哪里错了很简单.一行一行找呗,呵呵.玩笑.

我们要用的就是python解释器,也就是那个python script shell.

现在我们来写个错的代码:

import appuifw

appuifw.note(u"这里能写中文吗?当然不能了", "info")

我们把这个.py放到e:\system\apps\python\文件夹中(三版机直接放到e:\python或c:\python)

然后到功能表里运行python,选项-run script(运行脚本)-找到刚才你弄过来那个脚本确定.

如果没有错的话应该是正常运行或者闪一下就没有了[这是因为你没有加e32.Ao_lock().wait()]如果有错误的话就会在界面上出现如图中类似的文字.如果你懂英语应该很简单就可以知道是什么错误了,不懂英语的麻烦您查查字典之类的.注意一点,图中蓝色选中的位置里面有:line2,这个就是错误所在的位置了,错误在第二行.

用了三版机之后我才知道用ped写代码很方便,里面有一个Go to line的功能,就是到多少行,我们输入2之后一看,哦.原来是这里不能有中文.当然刚才界面上显示的也有提示你是什么错误.

下面我列举出几个错误代码的解释:

IndentationError:expected en indented block (a.py, line3)

缩进错误(a.py这个文件中的第三行)

ImportError: no module named fan

没有fan这个模块

NameError:name "os" is not defined

没有定义os.说明你没有import os

NameError:name "mifan" is not defined

没有定义mifan.说明你没有定义mifan=....

AttributeError: "module" object has no attribute "list"

该模块没有list这个函数

IOError:[Errno 2] No such file ordirectory named"e:\\abcdef.txt"

没有"e:\\abcdef.txt"这个路径或者文件

SymbianError:[Errno -46]KErrPermissionDenied

这个是三版编程中经常遇到的事,权限问题,三版机限制了很多

TypeError: rename()takes exactly 2 arguments(0 given)

rename函数需要两个参数(您指定了0个)
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/24 23:06 来自手机 | 显示全部楼层
终于更新完了…
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 129 天

[LV.7]常住居民III

发表于 2012/1/24 23:19 | 显示全部楼层
技术贴,虽然看不懂,但支持一下,以后慢慢学。
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

 成长值: 258

签到天数: 4711 天

[LV.Master]伴坛终老

发表于 2012/1/25 01:06 | 显示全部楼层
竟然发了三页
[发帖际遇]: 一个袋子砸在了 小樱 头上,小樱 赚了 5 樱币. 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 183 天

[LV.7]常住居民III

发表于 2012/1/25 02:46 | 显示全部楼层
学到了。。我以后也这样发贴。。樱币刷刷的来了。。。
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/25 09:09 | 显示全部楼层
xpc 发表于 2012-1-24 23:19
技术贴,虽然看不懂,但支持一下,以后慢慢学。

说实话我自己学得头昏脑胀的…
[发帖际遇]: 飞翔的鱼 在网吧通宵,花了 5 樱币. 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 451 天

[LV.9]以坛为家II

 楼主| 发表于 2012/1/25 09:11 | 显示全部楼层
小樱 发表于 2012-1-25 01:06
竟然发了三页

是啊…而且学完了才算会一点python…python各组件的功能太多了…
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2024/11/27 22:32 , Processed in 0.141059 second(s), 23 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表