作者:江南白衣

    充分体验到知识循环再用的好处,原本对PythonwxWidgets没有接触的,天黑天亮之间,已经作了一个半成品的桌面程序出来。

    1.选型
     通常选型之后,都会迫切的告诉别人自认为正确的原因,这时候路过的人就比较不幸了。
    我选Python和wxWidgets,是因为.......

     因为是发布到网上的小程序,要它很小,Java和.Net这两个还算当红但要装虚拟机的笨家伙最先out了,而Python在py2exe之后压成rar才3M,如果有心思还可以弄得更小。
    选wxWidgets是因为它可以通行于Windows,Linux两个位面,另外Fox也能通用,不过wxWidgets是像SWT一样用Native Widgets的,在WinXP上比较好看。
     用Python而不是C++,是为了快速开发。当然,心底里其实是贪好玩。本来喜欢Ruby的语法更纯洁一些,可惜wxRuby已经太久没更新了。

   2.wxWidgets
   所谓GUI框架,万变不离下面几点:
   1.框架结构
      拿个HelloWorld一看就懂,又是Application->Frame->Menu 的标准架构。

   2.wxWidgets用法
      来来去去还是Text框,选择框,按钮几个老面孔,在wxPython上把wxPython2.6-win32-docs-demos-2.6.1.0.exe档下载回来,就有C++版本的API手册与python版本的每个widgets的Demo Code。

   3.控件与页面的Layout
      一种方式是C# Winform和Swing那样在程序里生成组件和layout,经历过SWT手写代码画页面的折磨,再看到一层又一层的Container代码(wxWidgets里是Sizer)已经不觉得麻烦了。也有所见即所得的工具如BOA,不过毕竟没有Visual Studio for WinForm那么好,难以真正使用。
      一种是像Delphi, VC或未来的XAML那样把控件和layout记在XML文件里。但我没有用。

4.事件分发机制
     像 EVT_BUTTON(self,ID_UPLOAD, self.onUpload)这样的代码,挺简单的。

   可见,只要有过GUI编程的经验,再学wxWidgets 很容易。
参考书:《Cross-Platform GUI Programming with wxWidgets》
                   《wxPython in Action》

   3. Python
   手边放一本Python的参考书,只要对动态语言有点感性认识,对着Sample Code能能猜就猜,猜不到就拿chm版的参考书来索引,也很容易入门。

   最难的地方发生在遍历目录,那时候已经有点困了:

for root, dirs, files in os.walk('C:/projects/'):
    
print sum(getsize(join(root, name)) for name in files)


    这是什么见鬼语法阿!!
     原来os.walk('C:/projects") 的返回值是一个tuple。在C++ Boost库中接触过这个概念,平常函数都只能返回一个值,而tuple可以让你返回多个(这样就不用利用传址的参数来返回啦),所以就有了for root,dir,files in os.walk()这样的句子。
    还有 print join(root,name) for name in files,原来python还有这种把闭包写在for的前面的简写法。

    IDE最后还是用了Eclipse的插件PyDev,毕竟Eclipse看着比较舒服,其他编辑器做得那么难看,怎么还好意思收钱。

4.美化界面  
     因为wxWidgets用的是native widgets,不像Delphi,C# 和Swing有专门的look and feel 美化控件,所以美化的主要方式是为Toolbar和Button配上好看的图标,还有修饰整个软件的配色。
     推荐Tango一个图标库:http://tango-project.org/ to make open   source software beautiful...说出了我的心声啊,"顶尖儿的程序员必有完美主义艺术家之倾向。",目前的图标还不多,迅速更新中。

Posted on July 25, 2007 11:24 PM | | Comments (0) | TrackBacks (0)

1、如果获取邮件地址?

我们分析邮件的时候,从From和To头信息中会提取到类似“DIrk Ye ”的邮件地址,如果我们需要只保留完整的EMail地址,可能需要正则表达式来提取,由于邮件格式的多样性,可能比较麻烦。Python提供了一个工具函数,可以方便的使用:

import email.Utils

def getCleanMailAddress(strAddr):

emails = email.Utils.parseaddr(strAddr.lower())

return emails[1]

2、利用Mimetypes确定文件的扩展名:

在邮件分析中,经常会碰到没有指定文件名或者扩展名的附件,我们可以根据附件的MimeType来猜测其应有的扩展名:

import mimetypes

def getFileExtension(strContentType):

guessmimes = mimetypes.guess_all_extensions(strContentType)

if guessmimes:

return guessmimes[-1]

else:

return ''

另外,mimetypes.types_map中包含了所有运行系统可识别的MimeType,如果没有你期望的类型,可以通过mimetypes.add_type(’audio/midi’, ‘.mid’)方法来添加自己的东西,甚至可以作出修改。

3、使用证则表达式从字符串中提取指定的模式:

Python的正则表达式也是非常强大的,有搜索、匹配、抽取等。有时候抽取是有点麻烦但非常有用的功能。假设我们会有大量的文本类似:

n234f@mypdx.com


其中前半部分的名称都是数字和字母的组合,现在我们使用证则表达式抽取名字部分:

import re

def getUserName(strAddr):

addr_re = re.compile('^([0-9a-z]+)@(.*)')

unames = addr_re.search(strAddr)

if unames is not None:

return mptos.group(1)

else:

return ''

Python在文字处理方面还有很多特点,我只能把用到的东西列一下。有不少专门讲解Python相关东西的书籍,有的还是免费的;比如专门讲解Python文本处理的Text Processing in Python,实用而精彩,而另外一本Python Cookbook也是相当不错的读物,现在已经有第二版了,覆盖了Python2.3、2.4的新特性;去Python主站看看有什么适合你的书:http://wiki.python.org/moin/PythonBooks(dirkye)

Posted on July 25, 2007 9:05 PM | | Comments (0) | TrackBacks (0)

Python是软件开发领域一朵诱人的奇葩:人们经常把Python看作是一种起到缝合作用的严格脚本语言,不过却很少有人意识到Python已经足够强 大到应用于工业级软件开发领域。Python的年岁比Java老,到现在,这种语言已经发展出了规模虽然不大但仍然在成长中的自描述企业应用 Pythonistas。

Continue reading "Python企业应用的优缺点"
Posted on July 25, 2007 7:46 PM | | Comments (0) | TrackBacks (0)

(一)简介
Doxygen可以从C++, java等源代码中提取消息来生成帮助文档, API资料等。Doxygen辅于Graphviz的 dot小工具,则可以自动生成UML的类图等。
(二)quick start
以下,是在windows平台下的demo介绍。linux下,步骤类同。
示例
1)下载Doxygen
http://www.stack.nl/~dimitri/doxygen/index.html
doxyen主页
下载Graphviz(如果你不需要生成UML图的话,就不是必需的。不过,偶建议大家也下载一下吧)
http://www.graphviz.org/
Graphviz - Graph Visualization Software

Continue reading "doxygen示例"
Posted on July 25, 2007 7:27 PM | | Comments (0) | TrackBacks (0)

1. 校验千位数
2. 检验百位数
你可能经常看到罗马数字,即使你没有意识到他们。你可能曾经在老电影或者电视中看到他们(“版权所有 MCMXLVI” 而不是 “版权所有1946”),或者在某图书馆或某大学的贡献墙上看到他们(“成立于 MDCCCLXXXVIII”而不是“成立于1888”)。你也可能在某些文献的大纲或者目录上看到他们。这是一个表示数字的系统,他能够真正回溯到远古的罗马帝国(因此而得名)。

Continue reading "Python之罗马字母"
Posted on July 25, 2007 5:56 PM | | Comments (1) | TrackBacks (0)

1 IDLE
1.1 IDLE是python创初人Guido van Rossum使用python and Tkinter来创建的一个集成开发环境。要使用IDLE必须安装python and Tkinter。
1.2 特性:自动缩进,彩色编码,命令历史(Alt+p,Alt+n)和单词自动(Alt+/)完成。
1.3 用IDLE执行Tkinter程序,不要在程序中包括mainloop。IDLE本身就是Tkinter应用程序,它会自动调用mainloop。再调用一次mainloop会与IDLE的事件循环冲突,造成运行时错误。

2 BlackAdder
2.1 BlackAdder支持windows and linux环境。用它创建的程序可在任何一种平台上运行,负责维护它的是TheKompany.com。他们发布了该软件的个人版 ,只提供有限的支持;以及专业版,需要许可,面向商业软件开发者。详情请访问 www.thekompany.com/products/blackadder。

3 PythonWorks
3.1 它由SecretLabs公司发布,该公司致力于Python项目的开发与部署提供相应的工具。PythonWorks是一种“快速应用程序开发”(RAD)工具,程序员可借助它快速地创建、调试和发布程序。
3.2 PythonWorks包括一个HTML/XML编辑器、具有完全索引的文档、一个源码管理系统(用于项目分组)、自定义的代码编辑特性以及一个GUI布局编辑器。支持jython。
3.3 允许用户以多种形式对项目进行打包:源码形式、可执行程序形式以及.pyc形式。
3.4 有版权,需购买,详情请访问www.pythonware.com/products/works/index.htm

4 Wing IDE
4.1 Wing IDE由Archaeopteryx Software公司开发与支持,适用于windows and linux环境。它提供一个源码分析器和浏览器、项目管理能力以及文本编辑器和调试器。
4.2 它由python编写,并包含python源码。购买者可自定义源码,以适应自已的要求,但是,不可将修改过的代码用于赢利目的。
4.3 全功能演示版可在archaeopteryx.com/wingide下载。(mypython.net提供wing IDE 1.1.9.1及其license)

5 Pythonwin
5.1 Pythonwin集成开发环境包含在由ActiveState出品的ActivePython中,ActivePython是一个二进制build。其中包括用于XML处理的expat模块,以及一系列windows工具。
5.2 提供的特性有:彩色编码、源代码折叠、单词完成及自动缩进。调试器支持事后诊断功能、标准的单步调试、断点设计及变量监视。
5.3 详情请访问aspn.activestate.com/activepython。

6 Komodo
6.1 ActiveState还为python提供了另一个IDE,名为Komodo,可用它在windows and linux上开发程序。Komodo最大的特点是,它是Perl,PHP,Tcl,HTML,XML AND XSLT的一种集成开发环境。

7 Boa Constructor
7.1 Boa是一个跨平台的python IDE和WxPython GUI。它提供可视化的编程和操作框架,能方便地进行程序的设计。它有一个对象浏览器,并提供有各种资源的视图,有一个html文档生成器,还有一个先进 的调试器和完整的帮助系统。Boa还提供对zope的支持,能添加、删除、复制、剪切、导入和导出zope中的对象。能编辑对象属性和进行python脚 本的调试。Boa是用python基于WxPython库编写的。 用起来就象vb或delphi一样方便。
7.2 下载地址是:http://boa-constructor.sourceforge.net/,要安装Boa要先安装合适版本的python和WxPython。

在windows平台我就是用pythonwin,感觉还不错,和idle差不多,在windows平台的可考虑用它。(linuxsir)

Posted on July 24, 2007 7:12 PM | | Comments (0) | TrackBacks (0)

如果您想在像 Linux 一样的 UNIX 兼容的操作系统上安装二进制包很容易。 预编译好的二进制包对大多数 Linux 发行版是可用的。或者您可以通过源码进行编译。

在 http://www.python.org/ftp/python/ 选择列出的最新的版本号, 然后选择其中的rpms/ 目录下载最新的 Python RPM 。 使用 rpm 命令进行安装, 操作如下所示:
例 1.2. 在 RedHat Linux 9 上安装

localhost:~$ su -
Password: [enter your root password]
[root@localhost root]# wget http://python.org/ftp/python/2.3/rpms/redhat-9/python2.3-2.3-5pydotorg.i386.rpm
Resolving python.org... done.
Connecting to python.org[194.109.137.226]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7,495,111 [application/octet-stream]
...
[root@localhost root]# rpm -Uvh python2.3-2.3-5pydotorg.i386.rpm
Preparing...                ########################################### [100%]
   1:python2.3              ########################################### [100%]
[root@localhost root]# python          
Python 2.2.2 (#1, Feb 24 2003, 19:13:11)
[GCC 3.2.2 20030222 (Red Hat Linux 3.2.2-4)] on linux2
Type "help", "copyright", "credits", or "license" for more information.
>>> [press Ctrl+D to exit]
[root@localhost root]# python2.3       
Python 2.3 (#1, Sep 12 2003, 10:53:56)
[GCC 3.2.2 20030222 (Red Hat Linux 3.2.2-5)] on linux2
Type "help", "copyright", "credits", or "license" for more information.
>>> [press Ctrl+D to exit]
[root@localhost root]# which python2.3
/usr/bin/python2.3

仅仅键入 python 运行的是老版本的 Python —— 它是缺省安装的版本。它不是我们想要的。

截止到笔者写作时, 新的版本是 python2.3。 您可能会需要修改示例脚本的第一行的路径指向新版本。

这是我们刚装的 Python 新版本的全路径。在 #! 行中(每个脚本的第一行)使用它来确保脚本运行在最新版的 Python 下, 并且确信敲入的是 python2.3 进入交互shell。

Posted on July 24, 2007 6:45 PM | | Comments (0) | TrackBacks (0)

       CSDN 编译】我知道,单是文章的题目就会引来很大的争论,我也知道针对不同的开发你会有不同的语言。而且Python 写的代码素来有 executable pseudo code 的美称。所以我拟制不住我的心情,决定写点什么。

       这之前有过Python Java 这样类似的比较,我都没有在意。然而这次作者的观点让我赞叹。自从我开始使用Python,我都无法用言语来表达它所带给我的美妙体验。对比我所熟悉的其他语言,像C/C++JavaPascalAssembler……将头脑中的设计转化为可运行的代码是很费劲的工作,但是Python 将我带入了Power Scripting Language 的世界。


       Python 非常适合初学者,而且在学的过程中,会让你轻松地学到Python 中所有重要的编程和开发方法包括面向对象。


我这里说的初学者不仅指大学生,还包括高中生甚至更低年级的学生。所以在教授编程语言的一开始就让他们明白学的是什么,这非常重要。“Hello World”几乎是每个语言的第一个程序,我以此为例进行说明。


BASIC 中:10 PRINT "Hello world!"


对于初学者,虽然很每个字符都能够看懂,但是BASIC 也有缺陷——它不够强大。


再看C


#include <stdio.h>

main()

{

    printf("Hello world!n");

}

你必须要解释什么是函数、特殊符号、文档……而这些在最初的学习时,学生是不可能明白的,他们只能闹钟存在这这些疑问继续学习下去。


再看Java


class HelloWorld

{

    public static void main(String args[])

    {

        System.out.println("Hello World!");

    }

}

C一样,你要解释什么是类、类方法、参数传递、数组……


       最后看Pythonprint "Hello World!"


就这么简单。在学习的初期,脑中没有疑问和恐惧,接下来你可以逐渐给他们讲解什么是列表、哈希表、类、对象……而且我跟其他人讨论过,很多人也有这样的感触。所以说,Python是第一门你需要的语言。


       为什么又说Python 是你需要的最后一门语言呢?之前说过了,它是你介绍编程和其他开发概念的优秀语言。同时,它也是能够建立真正应用的语言。这我就不多说了,去Google搜索一下你就会知道用Python取得成功应用的人实在是不胜枚举。


       学习其他语言可以扩展你的开发四尾,也可以让你在面对任务时有更多的选择。但是,有了Python这样一门语言,既便于学习编程,又可以在实际中构建大范围的应用。我强力推荐!

Tags:
Posted on July 20, 2007 9:40 AM | | Comments (1) | TrackBacks (0)

字符串 -- 不可改变的序列

如同大多数高级编程语言一样,变长字符串是 Python 中的基本类型。Python 在“后台”分配内存以保存字符串(或其它值),程序员不必为此操心。Python 还有一些其它高级语言没有的字符串处理功能。

在 Python 中,字符串是“不可改变的序列”。尽管不能“按位置”修改字符串(如字节组),但程序可以引用字符串的元素或子序列,就象使用任何序列一样。Python 使用灵活的“分片”操作来引用子序列,字符片段的格式类似于电子表格中一定范围的行或列。

Continue reading "Python文本处理"
Posted on April 13, 2007 8:38 PM | | Comments (0) | TrackBacks (0)

tplib模块定义了FTP类和一些方法,用以进行客户端的ftp编程。可以用python编写一个自已的ftp客户端程序,用于下载文件或镜像站点。如果想了解ftp协议的详细内容,请参考RFC959。

该模块是python的通用模块,所以默认应该已安装。ftplib模块使用很简单,暂时只有一个FTP类和十几个函数。

Continue reading "用python的ftplib模块编写ftp客户端程序的示例"
Posted on April 13, 2007 8:37 PM | | Comments (0) | TrackBacks (0)
上一页 1 2 3 4 5 6 7 下一页
相关内容
广告计划
最新评论
[评论] 鸿雁 : 默默地为他们祈祷吧
[评论] lym328 : 客源CRM非常不错-----如有需要可以了解
[评论] kevinwu : 作用肯定是有的,Google会首先搜索站
[评论] ss : 其实还真的感觉不到sitemap的作用~
[评论] kevinwu : 谢谢你的关注 :-)
[评论] h51h : 贵博客写得非常的好,界面简洁但内
[评论] snguo : 这里很好 来这里支持下呢?
[评论] redondo : 感谢你分享知识! 这篇文章我转载到
[评论] kevinwu : 就是这本;看来我买的贵了点 - 8折;我
[评论] 安妮 : 《Flex3.0 RIA开发详解:基于ActionScript3.0