51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 780|回复: 0
打印 上一主题 下一主题

[python] tkinter万年历之Python使用

[复制链接]
  • TA的每日心情
    无聊
    3 天前
  • 签到天数: 1050 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2023-6-2 11:09:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    程序实现制作一个 Tkinter 图形界面日历(只显示阳历日期),用户选择某年某月,图形化显示当月日历功能。运行效果如下:

      1. 界面绘制模块:tkinter
      Tk 是一个轻量级的跨平台图形用户界面 (GUI)开发工具。Tk 和 Tkinter 可以运行在大多数的 Unix 平台、Windows、和 Macintosh 系统。由于是 Python 自带的标准库,我们想要使用它的时候,只需直接导入即可。
      from tkinter import *

      2. 指定月份的第一天是星期几的计算
      不使用 python 提供的 calendar 提供日期计算方法。而是根据 1800 年 1 月 1 号为星期三,以此推算指定月份的第一天是星期几。
    1. from tkinter import *
    2.   from tkinter.ttk import *
    3.   
    4.   class App:
    5.   def __init__(self):
    6.   self.windos = Tk()
    7.   self.windos.title("万年历")
    8.   self.windos.geometry("430x180")
    9.   self.lis1 = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
    10.   self.images=[]
    11.   self.creat_image_lis()
    12.   self.creat_res()
    13.   self.windos.mainloop()
    14.   def func1(self):
    15.   self.get_total_days(self.a, self.b)
    16.   print(self.lis1[self.get_week(self.a, self.b) - 1])
    17.   self.print_days(self.a, self.b)
    18.   def creat_image_lis(self):
    19.   for i in range(1,13):
    20.   self.images.append("res/%s.png"%i)
    21.   
    22.   def go(self,*args):
    23.   
    24.   # self.T1.delete(0.0,END)
    25.   try:
    26.   self.a = int(self.C1.get())
    27.   self.b = int(self.C2.get())
    28.   self.func1()
    29.   except Exception:
    30.   # self.T1.insert(END,"请输入年份和月份")
    31.   pass
    32.   
    33.   def creat_res(self):
    34.   # self.windos.grid_rowconfigure(1,weight=1,minsize=30) # 限制最小高度为30像素
    35.   # self.windos.grid_columnconfigure(0,weight=1,minsize=66) # 限制最小宽度为66像素
    36.   
    37.   self.L1=Label(self.windos,text="     年     ")
    38.   self.L2=Label(self.windos,text="     月     ")
    39.   self.L22=Label(self.windos,text="     日     ")
    40.   
    41.   
    42.   
    43.   self.B1 = Button(self.windos, text="更新日历", command=self.go)
    44.   
    45.   self.temp1 = StringVar()
    46.   self.temp2 = StringVar()
    47.   self.C1=Combobox(self.windos,values=[x for x in range(1800,2024)],width=4)
    48.   self.C2=Combobox(self.windos,values=[x for x in range(1,13)],width=4)
    49.   self.C3=Combobox(self.windos,values=[x for x in range(1,32)],width=4)
    50.   
    51.   
    52.   self.L1.grid(row=0,column=0)
    53.   self.L2.grid(row=0,column=2)
    54.   self.L22.grid(row=0,column=4)
    55.   
    56.   self.C1.grid(row=0,column=1)
    57.   self.C2.grid(row=0,column=3)
    58.   self.C3.grid(row=0,column=5)
    59.   
    60.   self.B1.grid(row=0,column=6)
    61.   
    62.   
    63.   # self.L3.place(x=10, y=200, width=280, height=220)
    64.   
    65.   
    66.   listWeek=[" 周日 " ," 周一 " ," 周二 ", " 周三 " ," 周四 " ," 周五 ", " 周六 "]
    67.   for inx, cmd in enumerate(listWeek):
    68.   self.L33=Label(self.windos,text=cmd)
    69.   self.L33.grid(row=1,column=inx)
    70.   
    71.   #是否闰年
    72.   def leap_year(self,a):#a 不能用self.a
    73.   if a % 4 == 0 and a % 100 != 0 or a % 400 == 0:
    74.   return True
    75.   else:
    76.   return False
    77.   def year_days(self,a,b):#year_days b不能用self.b
    78.   # print(self.b)
    79.   if b in (1,3,5,8,10,12):
    80.   # days=31
    81.   return 31
    82.   elif b in (4,6,9,11):
    83.   # days=30
    84.   return 30
    85.   else:
    86.   if self.leap_year(self.a)==True:
    87.   # days=29
    88.   return 29
    89.   else:
    90.   # days=28
    91.   return 28
    92.   
    93.   # return days
    复制代码



    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-24 05:14 , Processed in 0.058849 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表