Python創(chuàng)建日歷實例
本文講述了Python創(chuàng)建日歷的方法,與以往不同的是,本文實例不使用Python提供的calendar實現(xiàn),相信對大家的Python程序設(shè)計有一定的借鑒價值。
此程序在windows下測試通過,由于python字符編碼直接輸出給操作系統(tǒng),so win下以gbk ansi為準(zhǔn),linux下大概以utf-8為準(zhǔn)(未測試)
#coding=gbk # -*- coding: cp936 -*- # 制作一個日歷(只顯示陽歷日期) '''實現(xiàn)方法:不使用python提供的calendar,根據(jù)給出的日期計算: 1.先根據(jù)輸入年份得到這一年的第一天是星期幾((year + (year - 1)/4 - (year - 1)/100 + (year -1)/400)% 7) 2.再依據(jù)輸入的日期(只需要年月就可以了)得到這個日期得到在當(dāng)前年份的第幾天 3.根據(jù)1和2得到當(dāng)前月份的第一天是星期幾。 4.創(chuàng)建日歷,其實就是在5x7的表格中預(yù)先放置5*7個Label,分別表示1-31的情況(應(yīng)該包含所有的情況)。 5.將1-31從得到的位置開始打印出來,以7為一行。 6.更新日歷,當(dāng)對日歷頭進(jìn)行操作(改變?nèi)掌跁r)就會更新日歷顯示的內(nèi)容。 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' # 對年月做了判斷,日只是加了上下限,沒有根據(jù)月判斷輸入的是否合法 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): '''創(chuàng)建日歷''' for i in range(5): for j in range(7): Label(master,text = '').grid(row = i + 2,column = j) def updateDate(): ''' 更新日歷''' #得到當(dāng)前選擇的日期 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): '''添加日歷頭''' # 得到當(dāng)前的日期,設(shè)置為默認(rèn)值 now = time.localtime(time.time()) col_idx = 0 # 創(chuàng)建年份組件 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 # 創(chuàng)建月份組件 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 # 創(chuàng)建年份組件 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 # 創(chuàng)建更新按鈕 btUpdate = Button(master,text = 'Update',command = updateDate) btUpdate.grid(row = 0,column = col_idx);col_idx += 1 # 打印星期標(biāo)簽 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()
感興趣的朋友可以調(diào)試運行一下本文實例,并根據(jù)自身需求對代碼加以改進(jìn)和完善。
相關(guān)文章
python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實現(xiàn)鳶尾花分類
這篇文章主要介紹了python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實現(xiàn)鳶尾花分類,幫助大家更好的利用python進(jìn)行深度學(xué)習(xí),感興趣的朋友可以了解下2021-05-05Pycharm中切換pytorch的環(huán)境和配置的教程詳解
這篇文章主要介紹了Pycharm中切換pytorch的環(huán)境和配置,本文給大家介紹的非常詳細(xì),對大家的工作或?qū)W習(xí)具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03python生成單位陣或?qū)顷嚨娜N方式小結(jié)
這篇文章主要介紹了python生成單位陣或?qū)顷嚨娜N方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05