这两天刚给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″表示无相关信息。没多大用,基本可以忽略(个人愚见)
呵呵,这样一来就可以利用时间信息做很多事情咯~~
几乎所有的程序都离不开任务栏的显示,wxPython下如何实现呢?来看一下下面这个示例程序
import wx
class iTipTaskBar(wx.TaskBarIcon):
"""继承wx.TaskBarIcon类"""
def __init__(self, frame):
"""frame是与其关联的窗口"""
wx.TaskBarIcon.__init__(self)
self.frame = frame
#设置任务栏显示图标和鼠标提示信息
self.SetIcon(wx.Icon('..\\pic\\iTip.png', wx.BITMAP_TYPE_PNG), 'iTip')
self.Bind(wx.EVT_MENU, self.OnTaskBarActivate, id=1)
self.Bind(wx.EVT_MENU, self.OnTaskBarDeactivate, id=2)
self.Bind(wx.EVT_MENU, self.OnTaskBarClose, id=3)
#覆写CreatePopupMenu函数,添加自定义弹出菜单
def CreatePopupMenu(self):
menu = wx.Menu()
menu.Append(1, 'Show')
menu.Append(2, 'Hide')
menu.Append(3, 'Close')
return menu
def OnTaskBarClose(self, event):
self.frame.Close()
def OnTaskBarActivate(self, event):
if not self.frame.IsShown():
self.frame.Show()
def OnTaskBarDeactivate(self, event):
if self.frame.IsShown():
self.frame.Hide()
代码很容易理解吧,使用的时候只需要在主窗口代码中与其关联即可,像下面这样:
self.iTipTB = iTipTaskBar(self)
发表回复