日程处理

目标是输入个文本文件关于日程的,就能够到时间的时候显示出来,在ubuntu系统上运行。

包括以下几点:

1.了解Tkinter。

1.1 参考文献自己制作Python IDEL

1.1.1 制作最简单的文本框和输出。

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import Tkinter as tk

#导入Tkinter模块

#创建一个类

class Application(tk.Frame):

#__init__初始化函数,包含了pack即填充方式。

def __init__(self, master=None):

tk.Frame.__init__(self, master)

self.pack()

#调用createWidgets()方法

self.createWidgets()

def createWidgets(self):

#定义部件1 hi_there模块,设置为button

self.hi_there = tk.Button(self)

self.hi_there["text"] = "Hello World\n(click me)"

self.hi_there["command"] = self.say_hi

self.hi_there.pack(side="top")

#定义部件2 QUIT模块,设置为button

self.QUIT = tk.Button(self, text="QUIT", fg="red",

command=root.destroy)

self.QUIT.pack(side="bottom")

def say_hi(self):

print("hi there, everyone!")

#获取tk实例

root = tk.Tk()

#构造类

app = Application(master=root)

#开始实例化

app.mainloop()

1.1.2 上面的pack是定义填充方式,widget.pack( pack_options ),其中

expand: 当设置为true,部件扩展填充,否则不能使用任何部件的母空间.

fill: 确定是否部件填补分配任何额外的空间,或保持其自己的最小尺寸:无(默认)和X(只填写水平)Y(只填写垂直),或两者兼而有之(填充横向和纵向).

side: 决定哪方父widget包对TOP(默认),下,左,或右.

1.1.3 注意在python2.7中lambda表达式不能直接使用print函数,需要先自定义一个函数然后调用

1.1.4 引入tkFiledialog的时候可以参考文献tkFiledialog引入

from tkFileDialog import *

2.功能模块

2.1 读写CSV文件。

参考CSV操作来写信息到文件中。

2.2 需要定义类方便读写这个CSV文件。

参考类定义,因为需要写入sequence对象,所以在这个类中需要定义类似如下结构:

class stepF:

mID = 0

mTimeStamp = datetime(1990,5,11,8,8,8)

mDuration = 0

mParentTask = 0

mSubTask = 1

mPriority = 0

mItem = "GT,xy"

def getSeq(self):

return [self.mID,self.mTimeStamp,self.mDuration,self.mParentTask,

self.mSubTask,self.mPriority,self.mItem]

最后写CSV如下,定义了那个getSeq函数用来在写入的时候调用:

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

import csv

from datetime import *

'''csv文件操作'''

csvfile = file('ss.txt','w')

writer = csv.writer(csvfile)

writer.writerow(['ID','TimeStamp','Duration','ParentTask'

,'SubTask','Priority','Item'])

data = []

class stepF:

mID = 0

mTimeStamp = datetime(1990,5,11,8,8,8)

mDuration = 0

mParentTask = 0

mSubTask = 1

mPriority = 0

mItem = "GT,xy"

def getSeq(self):

return [self.mID,self.mTimeStamp,self.mDuration,self.mParentTask,

self.mSubTask,self.mPriority,self.mItem]

s1 = stepF()

s1.ID=1

s2 = stepF()

data.append(s1.getSeq())

data.append(s2.getSeq())

writer.writerows(data)

csvfile.close()

读CSV格式的实例如下,这个init函数是用来在读入的时候构建实例:

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

import csv

from datetime import *

class stepF:

mID = 0

mTimeStamp = datetime(1990,5,11,8,8,8)

mDuration = 0

mParentTask = 0

mSubTask = 1

mPriority = 0

mItem = "GT,xy"

def __init__(self,all):

self.mID,self.mTimeStamp,self.mDuration,self.mParentTask,self.mSubTask,self.mPriority,self.mItem=all

def getSeq(self):

return [self.mID,self.mTimeStamp,self.mDuration,self.mParentTask,

self.mSubTask,self.mPriority,self.mItem]

csvfile = file('ss.txt','r')

reader = csv.reader(csvfile)

n = 0

data = []

for line in reader:

if n ==0:

n=1

continue

s = stepF(line)

print(s.mItem)

data.append(s)

csvfile.close()

print(data[1].mTimeStamp)

2.3 根据时间对ID排序。可以采用冒泡排序法,如下:

def sortSteps(data):

for i in range(len(data)):

for j in range(len(data)-1,i,-1):

if data[j].mTimeStamp < data[j-1].mTimeStamp:

temp = data[j]

data[j] = data[j-1]

data[j-1]=temp

2.4 线程模块如下,主要是实现了多个task并行执行

def delayrun(delayTime, delayMessage):

root = Tk()

root.title("remind")

root.geometry('500x600')

root.resizable(width=False,height=True)

s = delayMessage

l = Label(root, text=s, bg="green", font=("Arial",24),width=200, height=600)

time.sleep(delayTime)

l.pack()

root.mainloop()

class tkThread(threading.Thread):

def __init__(self, delayTime,delayMessage):

threading.Thread.__init__(self)

self.delayTime =delayTime

self.delayMessage =delayMessage

def run(self):

delayrun(self.delayTime,self.delayMessage)

3.最后把各个模块组合起来实现了读入csv文件并定时显示事件,需要注意的是csv第一行是标题不能占用。ss.txt格式如下:

ID,TimeStamp,Duration,ParentTask,SubTask,Priority,Item

0,2016-06-13 22:00:08,0,0,1,0,"详细规划"

3.1 全部代码如下:

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

import csv

from datetime import *

from Tkinter import *

import threading

import time

'''定义这个变量用来方便写入读出csv文件'''

class stepF:

mID = 0

mTimeStamp = datetime(1990,5,11,8,8,8)

mDuration = 0

mParentTask = 0

mRepeated = 1

mPriority = 0

mItem = "GT,xy"

def __init__(self,all):

self.mID,self.mTimeStamp,self.mDuration,self.mParentTask,self.mRepeated,self.mPriority,self.mItem=all

def getSeq(self):

return [self.mID,self.mTimeStamp,self.mDuration,self.mParentTask,

self.mRepeated,self.mPriority,self.mItem]

'''对事件变量进行排序,主要是针对时间点来排序'''

def sortSteps(data):

for i in range(len(data)):

for j in range(len(data)-1,i,-1):

if data[j].mTimeStamp < data[j-1].mTimeStamp:

temp = data[j]

data[j] = data[j-1]

data[j-1]=temp

'''输出到文件中去'''

def outputData(data):

csvfile = file('ss.txt','w')

writer = csv.writer(csvfile)

writer.writerow(['ID','TimeStamp','Duration','ParentTask'

,'SubTask','Priority','Item'])

for i in range(len(data)):

data[i].mID = i

writer.writerow(data[i].getSeq())

csvfile.close()

''' 读入数据'''

def inputData(data):

csvfile = file('ss.txt','r')

reader = csv.reader(csvfile)

n = 0

for line in reader:

if n ==0:

n=1

continue

s = stepF(line)

data.append(s)

csvfile.close()

''' 在屏幕上显示提示信息'''

def delayrun(delayTime, delayMessage):

root = Tk()

root.title("remind")

root.geometry('500x600')

root.resizable(width=False,height=True)

s = delayMessage

l = Label(root, text=s, bg="green", font=("Arial",24),width=200, height=600)

time.sleep(delayTime)

l.pack()

root.mainloop()

''' thread用来显示多个事件'''

class tkThread(threading.Thread):

def __init__(self, delayTime,delayMessage):

threading.Thread.__init__(self)

self.delayTime =delayTime

self.delayMessage =delayMessage

def run(self):

delayrun(self.delayTime,self.delayMessage)

''' 用来存储读入的事件'''

data = []

inputData(data)

sortSteps(data)

''' 运行多个线程,当时间到了以后显示tk信息'''

for i in range(len(data)):

dt = datetime.today()

nt = datetime.strptime(data[i].mTimeStamp,"%Y-%m-%d %H:%M:%S")

if dt> nt:

continue

print(str(i))

print(str((nt-dt).total_seconds()))

print(data[i].mItem)

t=tkThread((nt-dt).total_seconds(),data[i].mItem)

t.start()

print("wait or not")

'''outputData(data)'''

python项目源码 日程管理_[Python] Python日程处理相关推荐

  1. python3源码剖析新版_《Python 3 源码剖析》

    介绍 本项目致力于对 Python 3.7 的源码分析,深度参考陈儒大大的<Python 源码剖析>,编写 Python 3 的版本. 希望各位 Python 爱好者能参与其中,一起探索 ...

  2. python项目源码 日程管理软件_分享:一个开源的基于时间管理四象限的待办管理工具...

    在完成这篇文章里要分享的一个开源小工具 todolist 之前,在网上找了不少日程管理,待办管理的小工具:开源的.收费的.有广告.需要注册的那也是不少: 根据自己平时的工作习惯:以及对时间管理的学习理 ...

  3. python项目源码 日程管理_基于fullcalendar制作的日程管理小demo

    一.项目地址: 二.项目功能概述: 该项目是基于fullcalendar而制作的日程管理,fullcalendar是一个基于jquery的日历插件,在该项目中,我们可以在日历上编辑我们的日程,并将日程 ...

  4. python项目源码 日程管理_JS日程管理插件FullCalendar简单实例

    在线演示              源码下载 HTML 首先第一步就是在需要调用FullCalendar日程插件的页面中载入必要的javascript和css文件,包括jQuery库文件,FullCa ...

  5. python项目源代码-python项目源码

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! pip install tencentcloud-sdk-python 注意:如 ...

  6. 一个完整的python项目源码-一个Python开源项目-腾讯哈勃沙箱源码剖析(上)

    前言 2019年来了,2020年还会远吗? 请把下一年的年终奖发一下,谢谢... 回顾逝去的2018年,最大的改变是从一名学生变成了一位工作者,不敢说自己多么的职业化,但是正在努力往那个方向走. 以前 ...

  7. 一个完整的python项目源码-一个Python开源项目-哈勃沙箱源码剖析(下)

    前言 在上一篇中,我们讲解了哈勃沙箱的技术点,详细分析了静态检测和动态检测的流程.本篇接着对动态检测的关键技术点进行分析,包括strace,sysdig,volatility.volatility的介 ...

  8. python程序源码百行_百行python代码,轻松完成贪吃蛇小游戏

    引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程序.以至于常常整天在那看各种语法教程,学了几个月还是只会print('hello world'). 这样做效率太低,正确的 ...

  9. python优秀源码新闻系统_[内附完整源码和文档] 基于python的新闻检索系统

    1 系统介绍 1.1 系统需求 新闻检索系统:定向采集不少于 4 个中文社会新闻网站或频道,实现这些网站新闻信息及评论信息的自动爬取.抽取.索引和检索.本项目未使用 lucene,Goose 等成熟开 ...

最新文章

  1. 金额阿拉伯数字转换为中文大写
  2. MYSQL体系结构-来自期刊
  3. 使用谷歌jquery库文件的理由
  4. 一文详解NDT算法实现
  5. 编程之美2.16 最长递增子序列
  6. Spring应用的单元测试
  7. Owasp live CD 2011下载地址
  8. java的接口怎么理解_如何理解Java 中的接口
  9. 初尝微信小程序2-基本框架
  10. 通过html备份数据库文件,备份网站文件和数据库
  11. 可行后继路由,可行条件和报告距离
  12. VS2010:外部依赖目录错误,怎么办
  13. mysql version 50713_MySQL 5.6 升级为 MySQL 5.7
  14. sqlite转sql2000数据库
  15. 谁要的手机用KRKR2 Onscripter 资源打包工具
  16. android 自动更换壁纸,安卓壁纸如何设置自动更换壁纸-手机天堂
  17. 大数据精准投放平台_基于大数据的广告精准投放方法与流程
  18. IPAPatch: 免越狱调试、修改第三方App
  19. 稀疏表示和字典学习的简单理解
  20. 基于密钥的ssh远程登录

热门文章

  1. 计算机文件是怎么存储的,电脑中重要的文档如何保存?有哪些的方法呢?
  2. 源来Intel——开放原子全球峰会
  3. TinyOS之串口通信TestSerial数据包分析
  4. 万能数据恢复软件哪个好 ,小牛数据恢复软件
  5. 忆阻器制成神经网络更高效
  6. 计算机毕业设计(附源码)python中草药管理系统
  7. is word 无法启动转换器 mswrd632.wpc
  8. ThingJS支持塌陷性能,加快3D渲染速度
  9. Map映射解决金银铜牌相对排名问题--LeetCode506《Blin-Stab》
  10. 工作流系统之二十五 .net工作流系统开发体会