WxPython功能强大,如何发挥他的功能需要你不断的探索。在使用WxPython之前对不同的UI接口进行一个综合的评价是非常有意的。
对于Python程序员
如果你是一个Python程序员,你可以注意到了Tkinter,它也是一个Python的界面工具箱。但是它存在一些问题:
- Tkinter是基于TK工具箱的,这时一种过时的技术。默认情况下,它不支持一些复杂的特性,比如树状控件和表格控件,而且也不支持预定义的对话框功能。
- TK不提供本地化窗口小部件的支持,界面在不同的操作系统平台下与本地的界面都不相同。在WxPythohn中对话框和窗口小部件和操作系统中看起来都是一样的。而在TK中按钮、字体和菜单在不同的平台下看起来与预先定义的都不太相同。
- 很多程序员发现TK的使用非常麻烦。相反,WxPython中的事件处理和传输机制更加灵活而强大。
你会发现WxPython可以很好的的解决这些问题。WxPython比起TK来说功能更加完备而且具有可扩展性。另外Python对WxPython的支持更加宽泛而灵活。
对于 WxWidget用户
对于已经开始使用WxWidget的人,现状你可以使用Python语言来开发WxWidget程序。Python语言语法清晰,拥有动态类型,灵活的对 象模型。Python的开发更加高效。Python中有广泛的标准库支持,你可以方便的集成到自己的应用中。Python比起C++来说更加简洁,而且还 有很多是只有Python支持的WxWidget功能。
对于新的用户
如果你从来没有接触过Python和WxWidget,那么这是个好机会,因为你可以同时拥有WxWidget和Python的优势。如果你正在使用 Java/Swing,你会发现WxPython比起Swing要简单,易于适用。你还会发现Python语言比起Java更加简洁。如果你正在使用针对 某个平台的C++工具箱,比如MFC,那么你会发现WxPython是平台独立的。为了进行接下来的讲解,熟练的Python知识是非常有帮助的。如果你 准备开始学习Python,你可以找一些书籍或者到www.diveintopython.org查找资料。
在接下来的文章中你会学到很多WxPython组件的内容:Python语言本身,WxWidget工具箱以及WxPython中的相关实现。
几乎你需要的所有界面元素在WxPython中都可以实现。在这一节中我将向你展示WxPython中包含的一些组件,其中展示的图片来自WxPyton Demo。图1.8是一个显示了很多基础组件的图片:按钮、多选框,组合下拉选择框、菜单、列表框和一个微调控件、文本输入框和一个单选按钮。
图1.9显示了一些不太通用的组件,但是它们非常有用。包括一个滑杆控件、一个可编辑的列表框、一个时间选择组件、一个工具条控件、一个记事本控件、一个树状控件和一个模拟时钟组件。
表格控件是WxPython中一个相对复杂的控件,你可以在其上自定义装饰器和编辑属性,图1.10例示了一个包含很多表格特性的例子。者还不是 WxPython的全部组件,你还可以使用一个包含全部HTML解析功能的组件,作为一个简单的web浏览器它包含一个帮组系统和其它显示HTML需要的 功能。图1.11是一个例子。
这里我们只是作一个简单的介绍。WxPython库还包含了用于显示图片的控件。WxPython还提供了剪贴板和拖放的支持,和MIME类型和对声音的支持,以及你的操作系统支持的所有对话框,以及你系统支持的所有布局模式,还有更多。
所有的组件值都是通过用户提交获得的。在接收请求值的状态中,JSF框架通过请求传输的参数来设置提交值。这一过程称为“编码”:
在hello.jsp中每个组件都被分派了一个唯一标示值:
<h:inputText id="helloInput" value="#{helloBean.numControls}"
required="true">
…
</h:inputText>
我们在这里声明了一个HtmlInputText组件,并且这个组件的ID是"helloInput"。当JSF将这个组件编码为HTML格式的时候,这 个组件的ID是自身ID加上了他的父ID的前缀的形式。发送到浏览器的ID通常是放在组件的id属性中,我们称之为客户端标签。比如这个HtmlInputText组件的标签是welcomeForm:helloInput,因为这个组件的父组件是HtmlForm而且他的标签是welcomeForm。
就像我们在上节中看到的HTTP请求内容,两个参数的其中之一名为helloInput并且他的值是64。在这个状态下JSF告诉每个组件对他们自身进行 编码。组件编码的过程是在请求中查找一个名称和自己标签名相同的参数。如果找到这个参数就会把参数值设置为组件值。所以在这个例子中,这个 HtmlInputText的值就会被设置64。
每个组件都有一个editable值和一个immediate属性。如果这个immediate属性被设置为true,校验的过程就在这个状态下完成而不 是在专门处理校验的状态。两者处理过程是相同的;随后会做详细的介绍(在我们上面的例子中没有组件的immediate属性被设置为true)。某些动作 源组件,比如按钮、超链接也包含immediate属性,如果被设置为true那么会在这个状态触发一个事件。这些事件的处理非常简单:比如,你可能有一 个“Cancel”按钮来忽略所有表单的值,或者是一个只是从另一个组件接收值的超链接(这些组件的immediate属性都是true)。
请求过程中的另一个参数是“welcomeForm”而且他的值是“welcomeForm”。不管这个参数是否存在,HtmlForm的 submitted属性都会被设置为true。这样就可以通过用户提交表单来执行不同的业务逻辑(一个页面中可以有多个表单)。
在这个状态中,基于请求的编码过程中也可以增加事件或者执行其它的业务操作。在我们这个例子应用中,这个状态还有另一个参数:“welcomeForm: redisplayCommand”它是另一个组件HtmlCommandButton的标识ID,它用于事件的触发。事件一旦被创建就会加入到 FacesContext中,在随后的提交应用程序状态中会用到它。
在这个状态之后,所有事件就会被发送到相应的监听器上。这时任何装饰器、组件和监听器会暂时挂起,并跳转到装饰响应状态。而且每个组件会适当的对自身进行编码,所以会根据请求设置一个适当的值。我们的例子中就是这样作的。
问:如何通过Python读取MS Word文档?
答:
可以适用文档VBA,Python中有一个win32com包可以处理VBA,代码如下:
#************************import win32com.clientimport tkFileDialog
# Launch WordMSWord = win32com.client.Dispatch("Word.Application")MSWord.Visible = 0 # Open a specific filemyWordDoc = tkFileDialog.askopenfilename()MSWord.Documents.Open(myWordDoc)#Get the textual contentdocText = MSWord.Documents[0].Content# Get a list of tableslistTables= MSWord.Documents[0].Tables#************************
问:
如何把一个英文单词变成首字母大写,其它小写。PYTHON有现
答:
"hello".capitalize()
千呼万唤是出来,iText终于发布了最新版本1.4版本。最新的版本增加了PDF的静态表单支持。它是通过XML Form 架构实现的(XFA)。
BaseFont现状支持自定义编码,并且PDFGState提供一个方法支持文档的套打。
对于RTF的支持,你现状可以通过导入一个已经存在的RTF文件来创建一个新的RTF。当然,新版本的iText修复了很多Bug。最新的IText可以从这里下载。
这篇文章是向你简单的介绍一下什么是TurboGears以及它能作什么。TurboGears的主要目的就是更快更简单的创建应用程序,当然还有许多其他特性,下面简单列出TurboGears到底能够做些什么:
- 让web中使用方法和函数更加简单。
- 让Html或者你写的API与JavaScript无缝结合。
- 提供一个XHtml工具设计器,这样你可以设计出更好的表示层。
- 你不用写SQL就可以操作数据库。
- 提供一个图形化的JavaScript编辑工具,写JavaScript不再那么麻烦了。
- 提供一种简洁明了、动态的语言。
更多特性:
![]() |
如图所示: TurboGears提供了一套优秀的组件并把他们集合到一起,你可以很方便的安装。TurboGears把这些部分无缝的结合在一起,但是在一个项目中他们是层次清晰的。并且每一个部分都分门别类的提供了文档、教程、邮件列表以及其他资源,你可以按照自己的喜好选择你感兴趣的部分。这些部分依次为: Mochikit:简洁但强大的JavaScript库。 Kid:他是一个设计器,是一个非常好用的模板系统。 CherryPy:利用它你可以像写Python函数一样控制Web的输入输出。 SQLObject:利用它你可以通过访问Python类来操作数据库,不必关心具体的数据库是什么(译者:类似Hibernante)。 |
现在你已经对TurboGreas有了一个大致的了解,详细的内容可以看这里。
等一下,还有更多内容
如果把TurboGears比作一部电影,那么上面提到的四个部分就是这部电影的主角。所以我们还需要一个关键人物—“导演”或者说“老板”来把这些“演员”管理起来。下面列出的是TurboGears的一些支持架构:
ElementTree:是一个非常好用速度很快的XML库。
FormEncode:是一个简单、易于扩展的校验框架。
TestGreas:一个使用标准Python单元测试功能的框架,你可以利用它来测试你的程序。
Json-Py :提供Python和json格式之间的转换。
TurboGears的授权
TurboGears是建立在其他开源项目基础之上的,并不是要取代他们。TurboGears的所有部分都是基于开源协议的,你可以在商业和非商业的项目中使用TurboGears,不管你是否开放源代码你都可以免费使用TurboGears。完整的授权协议请看这里。
TurboGreas的1.0版本已经发布
很多人使用TurboGrears
在最近开发的项目中遇到一个奇怪的问题。一个jsp页面中出现的汉字有个别显示为“?”问号。而其他的汉字显示是正常的。开始以为是通常出现的Java编码问题,但是已经对此进行了处理应该不会有问题,况且其他汉字显示正常。查找了相关的资料终于解决了。原来问题还是出在字符编码上,我们开发的系统页面使用了gb2312编码。对于某些生僻字没有支持,比如“玥”,“诫”。说生僻字其实也不太合适只能说gb2312不支持罢了。改成GBK就可以了。为了搞清楚问题特意查找了一下资料原来目前的汉字编码收录的汉字,已经和gb2312有很大差别了。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内
码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是
D7FA-D7FE。
GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。 2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。 现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。
现在明白了,原来是gb2312支持的汉字太少了。呵呵。
手机上也可以访问Struts应用,你相信吗?
以前一直作J2EE的应用,最近迷上了手机游戏,网上找一些资料竟然发现了这个东东。StrutsME
看名字就知道你可以在支持J2ME的设备(手机或者PDA)上访问Struts。官方介绍是这样的,翻译如下:
StrutsME允许你从一个J2ME客户端访问现有的Struts应用程序。StrutsME提供了访问Struts应用程序Action的接口。另外,还提供了下面这些功能:
- 服务器端的异常处理
- 同时支持“传统的”web浏览器和StrutsME客户端。
- 一个实例在上面两种客户端环境中可以并发访问Struts应用。
- 这两种客户端的操作是相同的(比如会话控制)
看来手机应用的范围越来越广了,似乎已经看到了不同平台之间应用的逐渐融合,不管怎么说对于广大开发人员来说这都是好事,感兴趣的朋友可以到这里看看。http://www.strutsme.org/
