Python创建日历实例

本文讲述了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:  passAppCal = Calendar()import timedef calcFirstDayOfMonth(year,month,day):  '''计算某一日的是星期几'''  months = (0,31,59,90,120,151,181,212,243,273,304,334)  if 0  11 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))% 7def 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()

登录后复制

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2290715.html

(0)
上一篇 2025年2月28日 00:30:12
下一篇 2025年2月25日 23:36:10

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论