python使用tkinter万年历
时间: 2023-07-20 15:08:27 浏览: 236
Python tkinter 下拉日历控件代码
5星 · 资源好评率100%
下面是一个简单的 Python tkinter 万年历程序的代码:
```python
import calendar
import tkinter as tk
from tkinter import ttk
class Calendar:
def __init__(self, parent):
self.parent = parent
self.cal = calendar.TextCalendar(calendar.SUNDAY)
self.year = 2021
self.month = 9
self.wid = []
self.day_selected = 1
self.month_selected = self.month
self.year_selected = self.year
self.day_name = ''
self.setup(self.year, self.month)
def clear(self):
for w in self.wid[:]:
w.grid_forget()
#w.destroy()
self.wid.remove(w)
def go_prev(self):
if self.month > 1:
self.month -= 1
else:
self.month = 12
self.year -= 1
#self.selected = (self.month, self.year)
self.clear()
self.setup(self.year, self.month)
def go_next(self):
if self.month < 12:
self.month += 1
else:
self.month = 1
self.year += 1
#self.selected = (self.month, self.year)
self.clear()
self.setup(self.year, self.month)
def selection(self, day, name):
self.day_selected = day
self.month_selected = self.month
self.year_selected = self.year
self.day_name = name
# data
self.selected = day, self.month, self.year
self.date.config(text=self.day_name + ' ' + str(self.month_selected) + ' ' + str(self.day_selected) + ' ' + str(self.year_selected))
def setup(self, y, m):
left = tk.Button(self.parent, text='<', command=self.go_prev)
self.wid.append(left)
left.grid(row=0, column=1)
header = tk.Label(self.parent, height=2, text='{} {}'.format(calendar.month_abbr[m], str(y)))
self.wid.append(header)
header.grid(row=0, column=2, columnspan=3)
right = tk.Button(self.parent, text='>', command=self.go_next)
self.wid.append(right)
right.grid(row=0, column=5)
days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
for num, name in enumerate(days):
t = tk.Label(self.parent, text=name[:3])
self.wid.append(t)
t.grid(row=1, column=num)
for w, week in enumerate(self.cal.monthdayscalendar(y, m), 2):
for d, day in enumerate(week):
if day:
#print(calendar.day_name[day])
b = tk.Button(self.parent, width=1, text=day,
command=lambda day=day: self.selection(day, calendar.day_name[(day-1) % 7]))
self.wid.append(b)
b.grid(row=w, column=d)
sel = tk.Label(self.parent, height=2, text='{} {} {} {}'.format(
self.day_name, calendar.month_name[self.month_selected], self.day_selected, self.year_selected))
self.wid.append(sel)
sel.grid(row=8, column=0, columnspan=7)
ok = tk.Button(self.parent, width=5, text='OK', command=self.kill_and_save)
self.wid.append(ok)
ok.grid(row=9, column=2, columnspan=3, pady=10)
def kill_and_save(self):
self.parent.destroy()
if __name__ == '__main__':
root = tk.Tk()
root.title("Calendar")
cal = Calendar(root)
root.mainloop()
```
代码解析:
- 首先,我们导入了 `calendar` 和 `tkinter` 两个模块。
- 然后,我们创建了一个名为 `Calendar` 的类,它包含了一个 `__init__` 方法,用于初始化程序。在初始化中,我们设置了一些默认值,如当前年份和月份,以及一些界面元素。
- `clear` 方法用于清除界面上的所有元素。
- `go_prev` 和 `go_next` 方法用于向前或向后移动日历。
- `selection` 方法用于处理用户选择日期的操作。
- `setup` 方法用于创建并设置日历的界面元素。
- `kill_and_save` 方法用于关闭程序并保存用户选择的日期。
最后,在 `main` 函数中,我们创建了一个 `tkinter` 应用程序,并实例化了一个 `Calendar` 类来显示日历。
阅读全文