显示标签为“python”的博文。显示所有博文
显示标签为“python”的博文。显示所有博文

2010年3月2日星期二

转 pickle——python对象的串行化

转贴来自&刘鑫的专栏 pickle——python对象的串行化

最近感觉自己虽然玩了3年多的python,但仅仅停留在使用的阶段上,对python的很多内容还不算很了解,打算沉下心来,扎扎实实的学些东西了。
对象的串行化感觉上是很有用的(但自己很少用到),不过还是好好学习下吧。

1)相关的python模块
在python 3.0里,和python相关的模块主要有2个:_pickle,marshal.
其中_pickle是对pickle的优化,是使用C语言对底层进行了一部分的优化。
marshal是python里原生的串行化类,但是在使用上pickle更加优秀,marshal的存在主要是为了支持python的*.pyc文件。
pickle模块和marshal模块有几方面的差别:
1>pickle模块对已串行化的对象进行跟踪,因此对同一个对象的引用不需要再次串行化。marshal不这么做。
对于循环对象而言,他们包括对自己的引用,因此marshal不支持循环对象。
共享对象由于是指有多个实例指向同一个引用,pickle保存一个引用,并使得其他实例都指向该对象,来保证所有实例的一致性。
2>marshal不能用来串行化用户自定义对象和它们的实例。pickle可以串行化这些对象,但前提是类的定义是可以引入的,并且和对象串行化的类在一个模块里。
3>marshal不能跨版本,因为它主要是用来支持*.pyc文件的,解释器不需要保持对以前版本的兼容性。而pickle可以做到这一点。

2)用法
pickle.dump(obj, file[, protocol])
pickle.dumps(obj[, protocol])
pickle.load(file[, *, encoding="ASCII", errors="strict"])
pickle.loads(bytes_object[, *, encoding="ASCII", errors="strict"])

3)异常
exception pickle.PickleError 基本的Error,从Exception继承而来
exception pickle.PicklingError 当一个不支持Pickle的对象被pickle被激发
exception pickle.UnpicklingError Unpickle出错时被激发,例如数据损坏或安全问题

4)可以被pickle的对象
None,True,False
数字,复数
字符串,字符集
元组,列表,集合,字典
模块的顶层函数、内置函数、类

2010年1月12日星期二

转:wxpython 换肤

原文:http://wiki.woodpecker.org.cn/moin/flyaflya

如果只用通用控件(不用Panel),可以实现完美换肤....

对newedit进行换肤,好玩....

原理是用win32com调用ActiveSkin实现的,因为wxpython的控件是native的,加上ActiveSkin支持COM,我也是突发奇想试了一下,想不到成功了,不过ActiveSkin是商业组件,而且现在已经停了,想买都没法买了,只有用盗版,而且只能在windows下用,有一些控件也不能很好支持,问题太多,所以我一直没公开这个技术,后来我试了很多支持COM的换肤控件包,都不关用。现在有人问起这个问题,就说一下。只需要增加三行代码。 需要安装:ActiveSkin43.rar 

切换行号显示
   1 import wx, win32com.client    2 ....    3 class MyApp(wx.App):    4     def OnInit(self):    5         self.skinLib = win32com.client.Dispatch("ActiveSkin4.Skin2") #载入ActiveSkin    6         self.skinLib.LoadSkin("Paper.skn") #载入皮肤    7         frame = MyFrame(None, "Simple wxPython App")    8         self.SetTopWindow (frame)    9         self.skinLib.ApplySkin(frame.GetHandle()) #使用皮肤 

-- flyaflya [2005-08-04 09:45:16]

2009年6月25日星期四

Python视频教程--(设置环境变量)Adding Python to DOS Path

自己作为一个PYthon的初学者,更能够理解一些初学者的迷惑的心情,和渴望有一个高手能给自己演示操作一下。这样或许能帮助我们更好的理解某些书面文字,今天上网搜到一个视频教程网,虽然是英文的但有些操作是可以看的,所以推荐给网友看看。

直接点击下面网址,进入网站在线观看。

视频所在网址: 'Adding Python to DOS Path'
at ShowMeDo from the Python category.

2009年6月24日星期三

wxpython demo labelbook学习心得

今天终于完成了一个自己第一个代码的完善工作--一个wxpython的demo labelbook的学习代码。
作为纪念想把代码写入博客,也算是给网友一个分享吧。
再此也要感谢python-cn`CPyUG`华蟒用户组(中文Py用户组)中一个叫汪文进的网友,他给了我很大的帮助使得我能够顺利完成。
程序代码如下:
import wx
import wx.lib.colourselect as csel
import os
import sys


try:
dirName = os.path.dirname(os.path.abspath(__file__))
except:
dirName = os.path.dirname(os.path.abspath(sys.argv[0]))

bitmapDir = os.path.join(dirName, 'images')
sys.path.append(os.path.split(dirName)[0])

try:
from agw import labelbook as LB
from agw.fmresources import *
except ImportError: # if it's not there locally, try the wxPython lib.
import wx.lib.agw.labelbook as LB
from wx.lib.agw.fmresources import *

#import images
_pageTexts = ["Hello", "From", "wxPython", "LabelBook", "Demo"]
#_pageIcons = []
_pageIcons = ["roll.png", "charge.png", "add.png", "decrypted.png", "news.png"]

#_pageIcons = ["icon-equiv.png","icon-minimiz.png","icon-product.png","icon-setup.png","product4x.png"]
_pageColours = [wx.RED, wx.GREEN, wx.WHITE, wx.BLUE, "Pink"]

class LabelBook(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.mainpanel = wx.Panel(self, -1)

self.SetProperties()
self.CreateLabelBook()
self.DoLayout()

self.SetSize((600,500))

#self.SetIcon(images.Mondrian.GetIcon())
self.CenterOnScreen()

#self.initializing = False
self.SendSizeEvent()

def SetProperties(self):

self.SetTitle("The success labelbook!-)")


def DoLayout(self):
mainsizer = wx.BoxSizer(wx.VERTICAL)
panelsizer = wx.BoxSizer(wx.VERTICAL)

panelsizer.Add(self.book, 1, wx.EXPAND, 0)
self.mainpanel.SetSizer(panelsizer)
panelsizer.Layout()

mainsizer.Add(self.mainpanel, 1, wx.EXPAND, 0)

self.SetSizer(mainsizer)
mainsizer.Layout()
self.Layout()

def CreateLabelBook(self):
style = self.GetBookStyles()

self.book = LB.LabelBook(self.mainpanel, -1,style=style)
#self.book = LB.FlatImageBook(self.mainpanel, -1, style=style)

self.imagelist = self.CreateImageList()
self.book.AssignImageList(self.imagelist)
#self.Refresh()

for indx, txts in enumerate(_pageTexts):
#label = "This is panel number %d"%(indx+1)
self.book.AddPage(TestPanel(self.book,_pageColours[indx]),
txts, True, indx)

self.book.SetSelection(0)
#self.book.SetWindowStyleFlag(style=LB.INB_FIT_BUTTON)

self.SendSizeEvent()

def GetBookStyles(self):
style = INB_FIT_BUTTON

style |= LB.INB_FIT_LABELTEXT
#style |= INB_WEB_HILITE
style |= INB_USE_PIN_BUTTON
#style |= INB_BORDER
#style |= LB.INB_SHOW_ONLY_TEXT #only used in FlatImageBook type

style = self.GetBookOrientation(style)

return style


def CreateImageList(self):

imagelist = wx.ImageList(32, 32)
for img in _pageIcons:
newImg = os.path.join(bitmapDir, "lb%s"%img)
bmp = wx.Bitmap(newImg, wx.BITMAP_TYPE_PNG)
imagelist.Add(bmp)

#bmp = imagebmp.GetBitmap()
#for i in range(5):
# imagelist.Add(bmp)

return imagelist

def GetBookOrientation(self, style):

style |= INB_LEFT
#style |= INB_RIGHT
#style |= LB.INB_TOP #only used in FlatImageBook type
#style |= INB_BOTTOM #only used in FlatImageBook type

return style

#---------------------------------------------------------------------------
class TestPanel(wx.Panel):
def __init__(self, parent,colour):
#self.log = log
wx.Panel.__init__(self, parent, -1)

st = wx.StaticText(self, -1,
"You can put nearly any type of window here,\n"
"and if the platform supports it then the\n"
"tabs can be on any side of the notebook.",
(10, 10))

b = wx.Button(self, -1, " Test LabelBook And FlatImageBook ", (100,100))


self.Bind(wx.EVT_BUTTON, self.OnButton, b)
self.SetBackgroundColour(colour)

def OnButton(self, evt):
msg= "this is a botton!"
dlg = wx.MessageDialog(self,msg,"this my test",wx.OK | wx.ICON_INFORMATION)
dlg.ShowModal()
dlg.Destroy()

if __name__ == '__main__':
app = wx.PySimpleApp()
frame = LabelBook(None)
frame.Show()
app.MainLoop()