运行环境
1.电脑环境
编译器:PyCharm 2021.2.1
解释器:Anaconda 3.8
2.库
tkinter、datetime、calendar 标准库不需要安装
完整代码
import tkinter
import tkinter.ttk
import calendar
import datetime
class Cal(tkinter.Tk):
def __init__(self):
# 重写属性
super(Cal, self).__init__()
# 获取当天日期 返回列表 ['年', '月', '日']
self.today = datetime.date.today().isoformat().split('-')
# 不允许调整界面大小
self.resizable(0, 0)
# 标题
self.title('日历')
# 界面大小及出现再屏幕中的位置 以屏幕左上交为原点
self.geometry('325x190+500+200')
# 设置样式主题
self.style = tkinter.ttk.Style()
self.style.theme_use('xpnative')
self.main()
def main(self):
# 设置变量值
self.year_v = tkinter.StringVar()
# 放置年
self.year_v.set(self.today[0])
# optionmenu 和 entry 允许修改
self.year = tkinter.ttk.Combobox(self, textvariable=self.year_v, value=[i for i in range(1949, 2999)], width=5,
justify='center')
self.year.grid(row=0, column=0, columnspan=2)
self.month_v = tkinter.StringVar()
self.month_v.set(self.today[1])
# 添加月 如01 02 03...
self.v = []
for i in range(1, 13):
if i < 10:
self.v.append('0' + str(i))
else:
self.v.append(str(i))
self.month = tkinter.ttk.Combobox(self, textvariable=self.month_v, value=self.v, width=3, justify='center')
self.month.grid(row=0, column=2, columnspan=2)
self.back = tkinter.Button(self, text='返回今天', width=12, command=self.new_today)
self.back.grid(row=0, column=4, columnspan=3)
# 设置星期
self.date_list = ['一', '二', '三', '四', '五', '六', '日']
for g in range(7):
t = tkinter.Label(self, text=self.date_list[g], width=5, fg='#808080')
t.grid(row=1, column=g)
# after(time, func)方法 每隔time调用func
# time 表示以毫秒为单位 func 函数对象
self.after(500, lambda: self.date(int(self.year.get()), int(self.month.get())))
# 返回今天日期
def new_today(self):
# 清空原有日期
self.year_v.set('')
self.month_v.set('')
# 放置今天日期
self.year_v.set(self.today[0])
self.month_v.set(self.today[1])
# 递归函数 在函数内部调用自身
def date(self, year, month):
# [[],[].....] 返回值
self.all_date = calendar.monthcalendar(year, month)
# enumerate 以元组的形式返回索引和值
for i in enumerate(self.all_date):
# 不能更改元组的值 所以这里用新的变量接收一下
n = i[0]
for k in enumerate(i[1]):
# 0 表示空
if k[1] == 0:
text = tkinter.Label(self, text='', width=5, fg='#808080')
text.grid(row=n + 2, column=k[0])
else:
text = tkinter.Label(self, text=k[1], width=5, fg='#808080')
text.grid(row=n + 2, column=k[0])
# 今天日期才执行
if self.year_v.get() == self.today[0] and self.month_v.get() == self.today[1]:
if str(k[1]) == self.today[2]:
text.config(background='#20b2aa')
self.after(500, lambda: self.date(int(self.year.get()), int(self.month.get())))
if __name__ == '__main__':
n = Cal()
n.mainloop()
结尾
为了学习tkinter模块,所以特意写一个日历小程序l来练练手,程序写得不是很好,我已经尽力了(本人自学),望各位见谅,同时也是希望各位看见的大佬能提出宝贵的意见,一个人的路途,终究是孤独的。最后与诸君共勉!!!