本文讲述了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的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

Notepad++7.3.1
Easy-to-use and free code editor

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.