Python使用tkinter万年历

发表于:2023-6-02 09:11

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:zhangjiang93    来源:CSDN

  程序实现制作一个 Tkinter 图形界面日历(只显示阳历日期),用户选择某年某月,图形化显示当月日历功能。运行效果如下:
  1. 界面绘制模块:tkinter
  Tk 是一个轻量级的跨平台图形用户界面 (GUI)开发工具。Tk 和 Tkinter 可以运行在大多数的 Unix 平台、Windows、和 Macintosh 系统。由于是 Python 自带的标准库,我们想要使用它的时候,只需直接导入即可。
  from tkinter import *
  2. 指定月份的第一天是星期几的计算
  不使用 python 提供的 calendar 提供日期计算方法。而是根据 1800 年 1 月 1 号为星期三,以此推算指定月份的第一天是星期几。
  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
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号