本文讲述了Python创建日历的方法,与以往不同的是,本文实例不使用Python提供的calendar实现,相信对大家的Python程序设计有一定的借鉴价值。

此程序在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()

感兴趣的朋友可以调试运行一下本文实例,并根据自身需求对代码加以改进和完善。

python日历程序编写_Python创建日历实例相关推荐

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

    Python创建日历的方法 以下代码不使用Python提供的calendar实现. 此程序在windows下测试通过,由于python字符编码直接输出给操作系统,so win下以gbk ansi为准, ...

  2. 怎么在HTML中加个日历,在HTML中创建日历

    我目前在HTML中创建一个日历作为学校项目的一部分.在HTML中创建日历 到目前为止,我已经创建了页面的基础知识.我想要的是一个日历,您可以创建约会,然后显示(如基本日历). 这里是我到目前为止做出( ...

  3. python实现动态壁纸_Python实现日历壁纸动态标记

    迁自QQ空间 2014-08-08 背景 可能这个标题不够明确到底要实现什么功能,下面详细介绍一下.由于windows系统任务栏的日期只有年.月.日,对于我来说,偶尔想看看农历,所以每次都要去问度娘. ...

  4. python关机程序代码_python实现的重启关机程序实例

    本文实例讲述了Python实现的重启关机程序的方法,对Python程序设计有一定的参考价值.具体方法如下: 实例代码如下: #!/usr/bin/python #coding=utf-8 import ...

  5. python壁纸程序代码_python实现壁纸批量下载代码实例

    前言 好久没有写文章了,因为最近都在适应新的岗位,以及利用闲暇时间学习python.这篇文章是最近的一个python学习阶段性总结,开发了一个爬虫批量下载某壁纸网站的高清壁纸. 注意:本文所属项目仅用 ...

  6. 用python制作微信机器人程序编写_Python制作微信聊天机器人

    可以借助图灵机器人和itchat插件来模拟机器人聊天. 1.注册图灵机器人账号 在官网注册(http://www.tuling123.com),注册完之后可以创建一个机器人,最终需要机器人的apike ...

  7. 建立通讯录python增删改查_python 字典使用实例:创建通信录并完成修改、查找操作...

    练习目的:巩固python 字典的创建,合并,修改及使用. 学了python字典后,同学们想创建一个自己的通信录,小明是这么做的: 先根据三位舍友的联系方式创建一个字典dicTXL 然后将隔壁舍长已创 ...

  8. 杨辉三角python语言程序思路_python杨辉三角方法的实例介绍

    程序输出需要实现如下效果:[1] [1,1] [1,2,1] [1,3,3,1] ...... 方法:迭代,生成器def triangles() L = [1] while True: yiled L ...

  9. python流程控制编写_Python 流程控制

    ### if 语句 也许最著名的语句是 if 语句了. 例如: ```python >>> x = int(input("Please enter an integer: ...

  10. python五子棋程序教程_python实现五子棋小程序

    本文实例为大家分享了python实现五子棋小程序的具体代码,供大家参考,具体内容如下 一.结合书上例子,分三段编写: wuziqi.py #coding:utf-8 from win_notwin i ...

最新文章

  1. 未将对象引用设置到对象的实例--可能出现的问题总结
  2. 3d button - where is OS type and version detected
  3. 有关软件工程的问题的分析和讨论及课后的作业3
  4. Linux的实际操作:文件目录类的实用指令(init运行级别和找回root密码)
  5. 数据湖正在成为新的数据仓库
  6. 计算机等级考试绝对应用,96年4月至210年全国计算机等级考试绝对全收集.docx
  7. 03-JavaScript基础-数据及数据类型
  8. 如何去除chrome最常访问的网页
  9. spark+dataframe+小汽车摇号倍率与中签率分析
  10. 2014年优秀动画片推荐:马来西亚动画片《Ribbit》
  11. ios苹果签名多少钱?苹果企业签名是最便宜的吗
  12. VS2013打包Windows程序部署教程
  13. h5应用数据加密_H5+应用打包JS没有加密混淆
  14. 了解OLE及ActiveX
  15. stream().map
  16. SOLO: Segmenting Objects by Locations
  17. 几种常见的网络摄像头_DVR方案_整理
  18. 【微信小程序】微信小程序实现在线音频播放
  19. 易语言外部数据库MySQL支持库Access数据库Sqlite数据应用
  20. 为什么要开发HDMI4K视频采集卡芯片方案‍

热门文章

  1. 【wpa_supplicant】 初始化
  2. cad补全三视图_cad补画三视图练习题.doc
  3. 每周推荐短视频:道哥表达了对自动驾驶技术的感恩之情
  4. *计算机二级MS office 注意事项*
  5. UG NX 12抽取复合曲线
  6. 如何理解边沿触发器和脉冲触发器?
  7. 软考—程序设计语言—有限自动机、正规式、编译程序基础、语法树、解释程序基础
  8. 窝囊同事做测试三年未涨工资,被开当天,bat全部大佬门口迎接!
  9. 一个宝爸对孩子幼儿园成长的思考,我写了6000字的总结
  10. 认知图谱:知识图谱+认知推理+逻辑表达