ubuntu8.10 Delivery

Filed under: 零零碎碎 | 2 Comments »
Posted on

 

    昨天收到的快递,包装很细致,内里用的都是泡泡缓冲袋…附送了4张贴纸。Happy…^_^

Popularity: 13% [?]

Tags :

py2exe打包笔记

Filed under: Python, 技术相关 | 3 Comments »
Posted on

    iTip虽然已经打包成功,但是有两点遗憾,一是未能打包成单个exe文件,打包目录下零散文件太多;二是打包后窗体xp样式丢失@_@。今天,终于~~终于解决了!

    先记录一下我打包遇到的问题:

  1. ImportError: No module named sqlite
  2. LookupError: unknown encoding: ascii
  3. 如何打包成单个exe文件
  4. 打包后窗口xp样式丢失

    以上问题都在setup.py文件中解决!给出我的setup.py文件代码:

Read the rest of this entry »

Popularity: 22% [?]

iTip打包记

Filed under: Python, 技术相关 | No Comments »
Posted on

    iTip的打包着实让我折腾了很久,今天终于被我曲折的打包成功了。

    iTip采用py2exe进行打包,setup.py是最简单的那种。打包过程很顺利,但执行exe文件确报错,错误如下:

Traceback (most recent call last):
  File “iTip.py”, line 6, in <module>
  File “zipextimporter.pyo”, line 82, in load_module
  File “iTipApp__init__.pyo”, line 1, in <module>
  File “zipextimporter.pyo”, line 82, in load_module
  File “iTipAppiTipFunction.pyo”, line 5, in <module>
  File “zipextimporter.pyo”, line 82, in load_module
  File “iTipDB__init__.pyo”, line 14, in <module>
  File “sqlalchemyengine__init__.pyo”, line 173, in create_engine
  File “sqlalchemyenginestrategies.pyo”, line 48, in create
  File “sqlalchemyengineurl.pyo”, line 92, in get_dialect
ImportError: No module named sqlite

    提示缺少sqlite模块。这确实是个很奇怪的问题,因为我在cmd下,执行python iTip.py命令能够很正常的运行程序,按道理,不该会出现这种找不到模块的现象。

    我追踪File “sqlalchemyengineurl.pyo”, line 92, in get_dialect这个错误,发现这是个需要返回模块“sqlalchemy.databases.sqlite”的语句。我在打包目录library.zip文件里面找到sqlalchemydatabases目录,该目录下只有一个postgres.pyc文件,并没有sqlite。难怪会报错。但是奇怪我根本没有使用postgres数据库,py2exe怎么会将这个文件打包??

Read the rest of this entry »

Popularity: 17% [?]

Tags : , ,

iTip开发笔记六

Filed under: Python, 技术相关 | No Comments »
Posted on

      我在前面的笔记五里面曾经提到过无法向Handler中传递参数的问题,今天和limoudou交流了一下,受益匪浅,成功的解决了这个问题。记录一下:

def fuc(self,somthing):
    def eventhandler(event):
        #process
        print somthing
        ......
    return eventhandler

采用函数嵌套函数的办法就能成功解决这个问题,看看将事件绑定的用法:

self.timer=wx.Timer(self)
self.Bind(wx.EVT_TIMER,self.fuc('Hello'),self.timer)
self.timer.Start(1000,oneShot=True)

    如此一来,就能够将所需参数传递给事件处理函数了!这样我就可以在iTip中为每个提醒事件创立一个Timer,然后将iTip实例作为参数传递给显示函数了…

    源代码先不改了,实在是没有力气了,刚刚又为打包折腾了一个上午,没有成功。运用py2exe进行打包的时候,提示错误很明显,说找不到sqlite模块。我在打包目录下的Library.zip里面自行添加了sqlite模块,结果又提示缺少另外一个模块,我再添加,又提示少另外一个,我的天啊~~~~~放弃!!!我实在就搞不明白了,我在命令行下用Python iTip.py能够成功运行程序,为什么,为什么,打包就这么难!!!!!用了3个打包程序都这么笨,就是找不到模块!

Popularity: 16% [?]

iTip

Filed under: Python, 技术相关 | No Comments »
Posted on

 

   iTip是个电子便笺,他的出现是我学习Python练手的产物。在这个过程中,我从Internet吸收了很多有用的知识和技巧,每当我在某个blog中找到所需要的信息时,我都会非常的感激。所以我也很希望有人能从我的blog中有所收获。

    已经成功打包,参见iTip打包记    py2exe打包笔记

 

 

===========11月20日改动部分代码============

取消gettext

更改iTip提醒代码

更改鼠标拖动代码,修正拖动错误

===========11月22日更新打包文件============

修正设置窗体List下的数据同步错误

===========11月25日重写iTip==============

 

iTip-Alpha版已经放出,请移步至这里

    

Popularity: 16% [?]

iTip开发笔记五

Filed under: Python, 技术相关 | No Comments »
Posted on

 

    iTip的基本功能终于开发完成了!纪念一下~~~~

    提醒功能的开发让我足足停滞了一天。首先对于iTip的提醒,肯定要用到wx.Timer控件,而且要不只用到一个,那如何动态创建多个变量呢?VB里面有个变量数组的概念,那Python下如何实现?逛了一下ChinaUinx的论坛,找到了一个帖子,里面的技巧帮我解决了这个问题,那就是建立字典,看下面这个演示:

self.timer={}
for i in something:
    self.timer[i]=wx.Timer(self)

 
这样一来,就方便的动态初始化了变量,在代码中也能很方便的使用self.timer[i]对变量进行调用了。
Read the rest of this entry »

Popularity: 15% [?]

听听吧

Filed under: 零零碎碎 | No Comments »
Posted on

高潮部分似乎有点熟悉…

Popularity: 8% [?]

Tags :

iTip开发笔记四

Filed under: Python, 技术相关 | No Comments »
Posted on

        iTip后台界面设计和部分功能开发完毕,目前正在设计iTip的提醒功能。后台界面的窗口样式选择了wx.CAPTION|wx.NO_BORDER|wx.SYSTEM_MENU|wx.CLOSE_BOX这样的组合,其中wx.No_BORDER是限制了窗口大小无法手动改变,wx.CAPTION和wx.CLOSE_BOX是指在标题栏加上“显示标题”和“显示关闭框”,这两个功能只有在启用了wx.SYSTEM_MENU样式之后才会生效。

 
        关于wxPyhon下,右键popupMenu的使用方法,这里有一个可复用的代码:

def OnRightClick(self, event):
        # only do this part the first time so the events are only bound once
        if not hasattr(self, "popupID1"):
            self.popupID1 = wx.NewId()
            self.popupID2 = wx.NewId()
            self.popupID3 = wx.NewId()
            self.Bind(wx.EVT_MENU, self.OniTipDelete, id=self.popupID1)
            self.Bind(wx.EVT_MENU, self.OniTipSearch, id=self.popupID2)
            self.Bind(wx.EVT_MENU, self.OniTipDeleteAll, id=self.popupID3)
        menu = wx.Menu()
        menu.Append(self.popupID1, u"删除")
        menu.Append(self.popupID2, u"查找")
        menu.Append(self.popupID3, u"删除全部")
        self.list.PopupMenu(menu, event.GetPosition())
        menu.Destroy()

 

使用过程中只需要将触发事件和函数Bind即可。如:

self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.OnRightClick, self.list)

Popularity: 13% [?]

iTip开发笔记三

Filed under: Python, 技术相关 | No Comments »
Posted on

     基本完成了iTip主窗口界面的设计。主窗口的主要功能有:

 

  •  添加便笺
  •  浏览便笺
  •  删除便笺
  •  锁定窗体
  •  设置提醒

 

    这个看似简洁的界面其实隐藏了很多控件,比如左下角的闹钟,只有鼠标放上去的时候才会出现,而点击小闹钟才会出现设置时间的控件。大量使用控件的Hide()和Show()方法才能使得窗体简洁。在设计过程中,有一个问题让我花费了大量的时间。 Read the rest of this entry »

Popularity: 12% [?]

iTip开发笔记二

Filed under: Python, 技术相关 | No Comments »
Posted on

        这两天刚给blog搬了家,在域名解析和数据导入上费了大工夫了。同时对Python的学习也异常缓慢囧

        iTip的消息有个重要的属性是“时间”,不光要记录日期还要精确到秒。那如何在SQLite中保存时间类型的数据,以及如何在python中使用呢?

        iTip的时间是这样一种格式“2008-11-09 18:23:21”,在SQLAlchemy中创建表数据的使用“DateTime”类型,它对应的SQLite中的数据类型为TIMESTAMP。这里要注意的是,SQLite相对于Python,能够接受的数据类型只有一种,那就是datetime。你不能直接将“时间字符串”往SQLite里面送,虽然SQLite里面对于TIMESTAMP的保存实际就是字符串形式。SQLite会自动进行转换。同理,那从数据库中返回的也是datetime类型的数据了。理解了这个就好办了。

        来看看datetime下的两个方法。

 
import datetime
 
now=datetime.datetime.now()

now输出的话看起来是这样的:2008-11-09 16:40:31.784000
这正是我要保存在数据库中的: 年 -月-日 时:分:秒:毫秒
其中毫秒的信息是不需要的,怎么利用这个时间类型做事情呢,看一看这个方法

Y,M,D,h,m,s,dw,dy,dl=now.timetuple()

timetuple()方法返回一个tuple,包含了time类型中的时间结构。

print "[%s]-[%s]-[%s]-[%s]-[%s]-[%s]-[%s]-[%s]-[%s]"%(Y,M,D,h,m,s,dw,dy,dl)

对应上面的now的输出结果看起来是这样的
[2008]-[11]-[9]-[16]-[40]-[31]-[6]-[314]-[-1]
年 月 日 时 分 秒
后面的”6″表示11月9日是星期日(0代表星期一)
在后面的”314″表示11月9日在是2008年里面的第314天
最后一个数字的含义是有关”if daylight saving time is effect”
“1″表示有效,”0″表示无效,”-1″表示无相关信息。没多大用,基本可以忽略(个人愚见)
呵呵,这样一来就可以利用时间信息做很多事情咯~~
Read the rest of this entry »

Popularity: 12% [?]