python生成日历_Python创建日历实例代码

Python创建日历的方法

以下代码不使用Python提供的calendar实现。

此程序在windows下测试通过,由于python字符编码直接输出给操作系统,so win下以gbk ansi为准,linux下大概以utf-8为准(未测试)

核心代码: 代码示例:

#coding=gbk

# -*- coding: cp936 -*-

# 制作一个日历(只显示阳历日期)

'''实现方法:不使用python提供的calendar,根据给出的日期计算:

1.先根据输入年份得到这一年的第一天是星期几((year + (year - 1)/4 - (year - 1)/100 + (year -1)/400)% 7)

2.再依据输入的日期(只需要年月就可以了)得到这个日期得到在当前年份的第几天

3.根据1和2得到当前月份的第一天是星期几。

4.创建日历,其实就是在5x7的表格中预先放置5*7个Label,分别表示1-31的情况(应该包含所有的情况)。

5.将1-31从得到的位置开始打印出来,以7为一行。

6.更新日历,当对日历头进行操作(改变日期时)就会更新日历显示的内容。

7.整个组件的布局是7x7的表格方式。第一行显示日历头,包括年月日的显示与选择;第二行为显示的日期,3-7为显示的月份信息。

'''

class Calendar:

pass

AppCal = Calendar()

import time

def calcFirstDayOfMonth(year,month,day):

'''计算某一日的是星期几'''

months = (0,31,59,90,120,151,181,212,243,273,304,334)

if 0 <= month <= 12:

sum = months[month - 1]

else:

print 'data error'

# 对年月做了判断,日只是加了上下限,没有根据月判断输入的是否合法

if year < 0 or month < 0 or month > 11 or day < 0 or day >31:

import os

os._exit(1)

sum += day

leap = 0

if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):

leap = 1

if (leap == 1) and (month > 2):

sum += 1

# 先计算某年的第一天是星期几

# (year + (year - 1)/4 - (year - 1)/100 + (year -1)/400)% 7

return (sum % 7 - 1 + (year + (year - 1)/4 - (year - 1)/100 + (year -1)/400))% 7

def createMonth(master):

'''创建日历'''

for i in range(5):

for j in range(7):

Label(master,text = '').grid(row = i + 2,column = j)

def updateDate():

''' 更新日历'''

#得到当前选择的日期

year = int(AppCal.vYear.get())

month = int(AppCal.vMonth.get())

day = int(AppCal.vDay.get())

months = [31,28,31,30,31,30,31,31,30,31,30,31]

# 判断是否瑞年

if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):

months[1] += 1

fd = calcFirstDayOfMonth(year,month,1)

for i in range(5):

for j in range(7):

root.grid_slaves(i +2,j)[0]['text'] = ''

for i in range(1,months[month - 1] + 1):

root.grid_slaves((i + fd - 1)/7 + 2,(i + fd -1)%7)[0]['text'] = str(i)

def drawHeader(master):

'''添加日历头'''

# 得到当前的日期,设置为默认值

now = time.localtime(time.time())

col_idx = 0

# 创建年份组件

AppCal.vYear = StringVar()

AppCal.vYear.set(now[0])

Label(master,text = 'YEAR').grid(row = 0,column = col_idx);col_idx += 1

omYear = apply(OptionMenu,(master,AppCal.vYear) + tuple(range(2005,2010)))

omYear.grid(row = 0,column = col_idx);col_idx += 1

# 创建月份组件

AppCal.vMonth = StringVar()

AppCal.vMonth.set(now[1])

Label(master,text = 'Month').grid(row = 0,column = col_idx);col_idx += 1

omMonth = apply(OptionMenu,(master,AppCal.vMonth) + tuple(range(1,12)))

omMonth.grid(row = 0,column = col_idx);col_idx += 1

# 创建年份组件

AppCal.vDay = StringVar()

AppCal.vDay.set(now[2])

Label(master,text = 'DAY').grid(row = 0,column = col_idx);col_idx += 1

omDay = apply(OptionMenu,(master,AppCal.vDay) + tuple(range(1,32)))

omDay.grid(row = 0,column = col_idx);col_idx += 1

# 创建更新按钮

btUpdate = Button(master,text = 'Update',command = updateDate)

btUpdate.grid(row = 0,column = col_idx);col_idx += 1

# 打印星期标签

weeks = ['Sun.','Mon.','Tues.','Wed.','Thurs.','Fri.','Sat.']

for week in weeks:

Label(master,text = week).grid(row = 1,column = weeks.index(week))

from Tkinter import *

root = Tk()

drawHeader(root)

createMonth(root)

updateDate()

root.mainloop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值