python图形界面万年历代码
时间: 2023-10-12 16:20:56 浏览: 166
以下是一个简单的Python Tkinter图形界面万年历代码:
```python
import calendar
import tkinter as tk
class Calendar:
def __init__(self, parent):
self.parent = parent
self.cal = calendar.TextCalendar(calendar.SUNDAY)
self.year = 2021
self.month = 6
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()
self.wid.remove(w)
def go_prev(self):
if self.month > 1:
self.month -= 1
else:
self.month = 12
self.year -= 1
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.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
self.highlight()
def highlight(self):
for w in self.wid:
if w[0] == self.day_selected and int(w[1]) == self.month_selected and int(w[2]) == self.year_selected:
w[3].config(bg='red')
else:
w[3].config(bg='white')
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:
# day_name is used to store the name of the day (e.g. Sunday)
day_name = calendar.day_name[calendar.weekday(y, m, day)]
b = tk.Button(self.parent, width=1, text=day, command=lambda day=day:self.selection(day, day_name))
self.wid.append([day, month, year, 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.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()
root = tk.Tk()
root.title('Calendar')
app = Calendar(root)
root.mainloop()
```
该代码使用Python的calendar模块来获取日历,并使用Tkinter库来创建图形界面。该代码创建一个Calendar类,其中包括以下方法:
- `__init__`:初始化方法,用于设置默认年份和月份以及调用`setup`方法来创建图形界面。
- `clear`:清空当前图形界面中的所有小部件(widgets)。
- `go_prev`:点击“<”按钮时调用的方法,用于显示上一个月的日历。
- `go_next`:点击“>”按钮时调用的方法,用于显示下一个月的日历。
- `selection`:当用户点击某个具体日期时调用的方法,用于高亮显示所选日期并将其存储在day_selected、month_selected和year_selected变量中。
- `highlight`:用于将所选日期高亮显示。
- `setup`:用于创建日历图形界面中的所有小部件。
- `kill_and_save`:用于关闭图形界面并保存所选日期。
要运行此代码,请将其保存为.py文件并运行。该代码将创建一个图形界面,其中显示当前月份的日历,并允许用户选择日期。用户可以使用“<”和“>”按钮来浏览不同的月份,并单击所选日期以高亮显示它。用户还可以单击“OK”按钮来关闭图形界面并将所选日期保存。
阅读全文