python使用tkinter万年历

程序实现制作一个 Tkinter 图形界面日历(只显示阳历日期),用户选择某年某月,
图形化显示当月日历功能。运行效果如下:

1. 界面绘制模块:tkinter
Tk 是一个轻量级的跨平台图形用户界面 (GUI)开发工具。Tk 和 Tkinter 可以运行在大多数
的 Unix 平台、Windows、和 Macintosh 系统。由于是 Python 自带的标准库,我们想要使
用它的时候,只需直接导入即可。
from tkinter import *
2. 指定月份的第一天是星期几的计算
不使用 python 提供的 calendar 提供日期计算方法。而是根据 1800 年 1 月 1 号为星期三,
以此推算指定月份的第一天是星期几。
#作者qq:462930626

from tkinter import *
from tkinter.ttk import *

class App:
	def __init__(self):
		self.windos = Tk()
		self.windos.title("万年历")
		self.windos.geometry("430x180")
		self.lis1 = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
		self.images=[]
		self.creat_image_lis()
		self.creat_res()
		self.windos.mainloop()
	def func1(self):
		self.get_total_days(self.a, self.b)
		print(self.lis1[self.get_week(self.a, self.b) - 1])
		self.print_days(self.a, self.b)
	def creat_image_lis(self):
		for i in range(1,13):
			self.images.append("res/%s.png"%i)

	def go(self,*args):

		# self.T1.delete(0.0,END)
		try:
			self.a = int(self.C1.get())
			self.b = int(self.C2.get())
			self.func1()
		except Exception:
			# self.T1.insert(END,"请输入年份和月份")
			pass

	def creat_res(self):
		# self.windos.grid_rowconfigure(1,weight=1,minsize=30) # 限制最小高度为30像素
		# self.windos.grid_columnconfigure(0,weight=1,minsize=66) # 限制最小宽度为66像素
		
		self.L1=Label(self.windos,text="     年     ")
		self.L2=Label(self.windos,text="     月     ")
		self.L22=Label(self.windos,text="     日     ")
		

		
		self.B1 = Button(self.windos, text="更新日历", command=self.go)
		
		self.temp1 = StringVar()
		self.temp2 = StringVar()
		self.C1=Combobox(self.windos,values=[x for x in range(1800,2024)],width=4)
		self.C2=Combobox(self.windos,values=[x for x in range(1,13)],width=4)
		self.C3=Combobox(self.windos,values=[x for x in range(1,32)],width=4)
		
	
		self.L1.grid(row=0,column=0)
		self.L2.grid(row=0,column=2)
		self.L22.grid(row=0,column=4)
		
		self.C1.grid(row=0,column=1)
		self.C2.grid(row=0,column=3)
		self.C3.grid(row=0,column=5)
		
		self.B1.grid(row=0,column=6)
		 
		 
		# self.L3.place(x=10, y=200, width=280, height=220)
	
	
		listWeek=[" 周日 " ," 周一 " ," 周二 ", " 周三 " ," 周四 " ," 周五 ", " 周六 "]
		for inx, cmd in enumerate(listWeek):
			self.L33=Label(self.windos,text=cmd)
			self.L33.grid(row=1,column=inx)
			
	#是否闰年
	def leap_year(self,a):#a 不能用self.a
		if a % 4 == 0 and a % 100 != 0 or a % 400 == 0:
			return True
		else:
			return False
	def year_days(self,a,b):#year_days b不能用self.b
		# print(self.b)
		if b in (1,3,5,8,10,12):
			# days=31
			return 31
		elif b in (4,6,9,11):
			# days=30
			return 30
		else:
			if self.leap_year(self.a)==True:
				# days=29
				return 29
			else:
				# days=28
				return 28

		# return days
		

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值