BlogJava

研究、学习Java的地方

  DonewsBlog  |  Donews首页  |  Donews社区  |  Donews邮箱  |  我的首页  |  联系作者  |  聚合   |  登录
  161篇文章 :: 3篇收藏:: 87篇评论:: 0个Trackbacks

公告



Locations of visitors to this page

文章

收藏

相册

Java

软件工程

数据库

新闻

存档


正在读取评论……


Python


    摘要:   新的hashlib已经加入到pyhon2.5中,这个模块是由Gregory P. Smith完成的。原来的md5和sha仍然可以使用。新的hashlib增加了附加的更安全的混淆选项(SHA-224, SHA-256, SHA-384, and SHA-512)。新的hashlib和原来的md5以及sha使用非常类似。区别比较大的地方是他们的构造函数发生了变化。比如
原来版本:
h = md5.md5()   
h = md5.new()


h = sha.sha()
h = sha.new()
新版本的:
h = hashlib.md5()

h = hashlib.sha1()

一旦hash对象被创建,那么其他方法就和以前的版本是一样的。
    (全文共427字)——点击此处阅读全文


    摘要:

Window styles

 

   说道窗口就必须说说窗口的风格。如果你以前用过delphi,vb开发,那么一定记得每个窗    (全文共29085字)——点击此处阅读全文



    摘要:

 

使用Python很长时间了,一直以来想写一些有关WxPython的文章,最近有时间准备对WxPython的使用作一次系统的整理。我将在随后的日志中逐步增加对WxPython应用的介绍,有关<    (全文共13902字)——点击此处阅读全文


在前面的文章中我们讲述了WxPython可以作什么。在这篇文章中我们将详细讨论WxPython是如何工作的。实际上WxPython是一套封装了C ++接口的wxWidgets(窗口小部件)。wxWidgets项目的发展已经有很长时间了,WxPython中几乎所有的功能都是由它实现的。通过 WxPython你可以通过Python而不是C++适用wxWidgets中的大部分功能。WxPython集成了这两个软件的功能,另外 WxPython本省也提供了更多的功能。为了让WxPython运行一个称为SWIG的工具用于产生封装的函数功能,它允许Python程序调用C++ wxWidget函数库。尽管SWIG已经完成了大部分工作,我们还是需要一些工具来使WxPython对象像其它Python库那样被Python调 用。还有一些非C++库的WxPython的专业工具包,你会在随后的讲述中了解到他们的使用。在这篇文章中我们讲大概的讲述一下Python语言和C+ + wxWidget工具箱。
 Python 语言
      Python语言非常易于适用他有类似与Perl的脚本语言的特性,同时对于大型应用的开发由具备C++和Java语言的特性。利用简单整洁的语法结构和 简洁的语义模式,Python语言可以把多个简单的模块结合成复杂的应用。在后续的文章中我假定读者已经了解Python语言并明白Python的基本概 念,诸如如何导入包和类等的方法。当然你不必是一个Python语言的专家,但是你应该能够读懂本文随后讲解中的例子。如果你想了解Python语言的详 细内容你可以在Python的网站上找到文档以及教程www.python.org/doc。
       Python中一个很重要的功能是动态解析,这对于语言的学习和调试非常有用。安装完Python之后需要设置环境变量,然后在命令行中键入python 命令。你会看到一个>>>符号,这是Python的命令行模式。在这里你可以输入Python表达式,它的值会立刻显示到屏幕上。比 如:
  $ python
Python 2.3.3c1 (#50, Dec 4 2003, 21:27:34) [MSC v.1200 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 2 + 2
4
>>> 10 / 3
3
>>> zip(['a', 'b', 'c'], [1, 2, 3])
[('a', 1), ('b', 2), ('c', 3)]
>>>
在上面的简短描述中,我们列示了一些简单的用法,使用Python内置的zip函数将两个列表对象压缩到一个列表对象中。你可以在交互模式下完成很多工作,比如导入包,定义函数,定义类等等。
 wxWidget工具箱
       wxPython中的另一个重要的部分是wxWidget工具箱。实质上,wxWidget是一个由C++实现的GUI框架,这意味着它是一套封装了C+ +类工具包。尽管wxWidget主要用于GUI应用程序,它还是包含了很多对于C++程序员非常有用的功能,包括很多ANSIC++未提供的数据结构实 现等,比如字符串、哈希表,以及一些与系统有关的实现比如socket和线程。由于这些功能已经在Python 中实现或者Python标注库中已经提供。因此wxWidget的封装中并不提供以上提到的支持。WxPython一般只提供wxWidget中GUI的 支持,wxWidget的设计目标是为C++提供通用的GUI支持,通过wxWidget编写的C++GUI程序在不同的平台下只要作很少的修改就可以编 译运行。
     下面是一个简单的C++ wxWidget程序,这个程序摘自Robert Roebling有关wxWidget指南的站点。这个程序创建了一个空白窗口,窗口上有一个包含连个项目的菜单。这个例子主要为了比较本文中C++实现与Python实现的不同之处。
例子:WxWidget的C++实现
#include "wx/wx.h"
class MyApp: public wxApp {
virtual bool OnInit();
};
class MyFrame: public wxFrame {
public:
MyFrame(const wxString& title, const wxPoint& pos,
const wxSize& size);
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
DECLARE_EVENT_TABLE()
};
enum {
ID_Quit = 1,
ID_About,
};
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(ID_Quit, MyFrame::OnQuit)
EVT_MENU(ID_About, MyFrame::OnAbout)
END_EVENT_TABLE()
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit() {
MyFrame *frame = new MyFrame("Hello World", wxPoint(50,50),
wxSize(450,340));
frame->Show(TRUE);
SetTopWindow(frame);
return TRUE;
}
MyFrame::MyFrame(const wxString& title, const wxPoint& pos,
const wxSize& size)
: wxFrame((wxFrame *)NULL, -1, title, pos, size) {
wxMenu *menuFile = new wxMenu;
menuFile->Append( ID_About, "&About..." );
menuFile->AppendSeparator();
menuFile->Append( ID_Quit, "E&xit" );
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append( menuFile, "&File" );
SetMenuBar( menuBar );
CreateStatusBar();
SetStatusText( "Welcome to wxWidgets!" );
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) {
Close(TRUE);
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) {
wxMessageBox("This is a wxWidgets Hello world sample",
"About Hello World", wxOK | wxICON_INFORMATION, this);
}
如果你熟悉C++你会发现上面的代码少了些东西,通常C++程序都有一个main()函数,这是程序的开始位置。在wxWidget程序中宏    IMPLEMENT_APP(MyApp)自动构建了一个main函数,这个函数负责了wxWidget程序的初始化。
像大多数平台中立的工具一样,展现在程序员面前的类实际上是一系列子类。一般来说针对不同的平台wxWidget都会提供一个子类,子类会根据不同的平台自动加载。在写这篇文章的时候目前支持以下几个平台:
  • Microsoft Windows
  • Mac OS
  • GTK,大多是Unix平台都支持。
对于不同的平台wxWidget都会试图适用本地的窗口和功能,并模仿本地GUI的样子。如果你熟悉其它大型的面向对象的接口工具箱,比如MFC或者 Java 的Swing,wxWidget和他们非常类似。与这些工具的一个不同之处是wxWidget不会创建一个包含组件的容器类(比如Java Swing中会创建JComponent和JContainer类),wxWidget增加子对象的方法是将所有的对象加到wxWindow基类上。
        wxWidget的开发很早之前就开始了,项目最早由爱丁堡大学的人工智能项目的Julian Smart于1992年创建。Smart试图创建一个可以在Unix和Windows下运行的程序。wxWidget的名称来自于这两个操作系统w来自 Windows而x来自Unix。最初版本中对于Windows平台是利用MFC写成的,而Unix是XView。但是,很快XView被Motif工具 箱代替,而MFC被代替未Windows API.。到了1997年整个系统中建立了大量丰富的API,随后GTK+成了Unix上的标准。之后Macintosh版本的也于下一年发布了。
        Python不是唯一与wxWidgets绑定的语言,虽然它有很大的用户群。wxWidgets站点上的链接指出目前支持的语言有Ada, Basic, C#, Eiffel, Euphoria, Haskell,Java, JavaScript, Lua, Perl, 以及Ruby。

       wxWidget和Python都非常优秀。灵活的Python语言使WxPython比起C++开发wxWidget更加简单。下表列出了wxPython环境和C++环境开发的不同之处。
C++环境
wxPython环境
内存控制由程序员负责
内存控制由Python语言负责
静态类型造成多态实现复杂
动态类型更容易实现多态
程序引用非常有限
程序引用简单,提供强大的抽象功能
函数无法当作参数使用
函数可以像其它变量一样当作参数传递
程序运行之前必须编译
程序可以动态解析
       之前我们用C++完成了一个hell world程序,下面是一个wxPython版本的程序:
wxPython写的hello world程序
import wx
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame("Hello World", (50, 60), (450, 340))
frame.Show()
self.SetTopWindow(frame)
return True
class MyFrame(wx.Frame):
def __init__(self, title, pos, size):
wx.Frame.__init__(self, None, -1, title, pos, size)
menuFile = wx.Menu()
menuFile.Append(1, "&About...")
menuFile.AppendSeparator()
menuFile.Append(2, "E&xit")
menuBar = wx.MenuBar()
menuBar.Append(menuFile, "&File")
self.SetMenuBar(menuBar)
self.CreateStatusBar()
self.SetStatusText("Welcome to wxPython!")
self.Bind(wx.EVT_MENU, self.OnAbout, id=1)
self.Bind(wx.EVT_MENU, self.OnQuit, id=2)
def OnQuit(self, event):
self.Close()
def OnAbout(self, event):
wx.MessageBox("This is a wxPython Hello world sample",
"About Hello World", wx.OK | wx.ICON_INFORMATION, self)
if __name__ == '__main__':
app = MyApp(False)
app.MainLoop()
       这里有两个与C++程序比较中不同的地方需要提出来。首先wxPython不需要一个宏来创建main函数,而是在模块的最后自己声明。其次两个程序的运 行机制是不同的,wxPython通过wx.Bind()来动态进行事件处理的传输。而C++需要通过DECLARE_EVENT_TABLE 和BEGIN_EVENT_TABLE宏来完成。除了上面的区别,你会发现Python程序非常清晰易读。Python语言提供了简单的语法以及自动的垃 圾回收机制。它还是一个平台独立的运行环境,对于快速开发GUI应用来说非常有效。
     wxPython和wxWidget还在不断的发展,未来还将提供移动设备和多媒体的支持。更多有关wxPython版本信息可以查看www.wxpython.org站点。


    摘要:我的WxPython的Frame如何全屏显示。    (全文共179字)——点击此处阅读全文

最近有人问我Python怎么调用Corba。最后终于找到了解决的办法
omniORB是一个针对Corba与Python和C++通讯的开源软件。具体功能可以看这里

       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是一个例子。
   
图1.8

图1.9

图1.10

图1.11
       这里我们只是作一个简单的介绍。WxPython库还包含了用于显示图片的控件。WxPython还提供了剪贴板和拖放的支持,和MIME类型和对声音的支持,以及你的操作系统支持的所有对话框,以及你系统支持的所有布局模式,还有更多。

问:如何通过Python读取MS Word文档?

答:

可以适用文档VBA,Python中有一个win32com包可以处理VBA,代码如下:

#************************
import win32com.client
import tkFileDialog

# Launch Word
MSWord = win32com.client.Dispatch("Word.Application")
MSWord.Visible = 0
# Open a specific file
myWordDoc = tkFileDialog.askopenfilename()
MSWord.Documents.Open(myWordDoc)
#Get the textual content
docText = MSWord.Documents[0].Content
# Get a list of tables
listTables= MSWord.Documents[0].Tables
#************************



    摘要:如何把一个英文单词变成首字母大写,其它小写。    (全文共148字)——点击此处阅读全文

第1页,共2页