最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

python程序25:寫一個應用實例–萬年歷

2023-08-01 17:24 作者:新的褪色者  | 我要投稿

今天寫一個python的應用實例,用到了python的三個模塊–tkinter、datetime、calendar,tkinter這個模塊之前的教程介紹過這里就不過多贅述,簡單說一下另外兩個默認模塊。

datetime定義了幾個類來表示日期、時間和時間間隔。其中最重要的類有:

datetime.date:表示日期的類,包括年、月、日。
datetime.time:表示時間的類,包括時、分、秒、毫秒。
datetime.datetime:表示日期和時間的類,包括年、月、日、時、分、秒、毫秒。
datetime.timedelta:表示時間間隔的類,可以用來進行時間的加減運算。
這些類都有各自的構造函數(shù)和屬性,可以根據(jù)需要進行使用。例如,可以使用 datetime.datetime.now() 獲取當前日期和時間,或者使用 datetime.timedelta(days=1) 創(chuàng)建一個代表一天時間間隔的實例。

calendar?模塊是 Python 中處理日歷的標準庫。它提供了一些函數(shù)和類來處理日歷和日期。其中最常用的函數(shù)有:

  • calendar.month(year, month, w=0, l=0):返回一個字符串,表示給定年份和月份的日歷。

  • calendar.calendar(year, w=2, l=1, c=6):返回一個字符串,表示給定年份的日歷。

  • calendar.weekday(year, month, day):返回給定日期是星期幾(0 表示星期一,6 表示星期日)。

  • calendar.isleap(year):返回給定年份是否為閏年。

  • calendar.leapdays(y1, y2):返回在給定年份范圍內(nèi)的閏年數(shù)量。

此外,calendar?模塊還提供了一些類,如?calendar.TextCalendar?和?calendar.HTMLCalendar,可以用于生成文本或 HTML 格式的日歷。這些類可以自定義輸出格式,并支持多種語言。

這里同樣需要先安裝模塊:pip install tkinter

以下為萬年歷代碼:

import tkinter as tk
import datetime
import calendar

class CalendarApp:
? ?def __init__(self):
? ? ? ?# 創(chuàng)建主窗口
? ? ? ?self.root = tk.Tk()
? ? ? ?self.root.title('萬年歷')

? ? ? ?# 創(chuàng)建日期標簽
? ? ? ?self.date_label = tk.Label(self.root, text='', font=('Arial', 20))
? ? ? ?self.date_label.pack(pady=20)

? ? ? ?# 創(chuàng)建日歷表格
? ? ? ?self.table = tk.Frame(self.root)
? ? ? ?self.table.pack(pady=20)

? ? ? ?# 創(chuàng)建日期選擇框
? ? ? ?self.year_var = tk.StringVar()
? ? ? ?self.year_var.set(str(datetime.datetime.now().year))
? ? ? ?self.month_var = tk.StringVar()
? ? ? ?self.month_var.set(str(datetime.datetime.now().month))
? ? ? ?self.year_entry = tk.Entry(self.root, textvariable=self.year_var, font=('Arial', 16), width=6)
? ? ? ?self.year_entry.pack(side=tk.LEFT, padx=10)
? ? ? ?self.month_entry = tk.Entry(self.root, textvariable=self.month_var, font=('Arial', 16), width=4)
? ? ? ?self.month_entry.pack(side=tk.LEFT)
? ? ? ?self.go_button = tk.Button(self.root, text='Go', font=('Arial', 16), command=self.go)
? ? ? ?self.go_button.pack(side=tk.LEFT, padx=10)

? ? ? ?# 顯示日歷
? ? ? ?self.show_calendar()

? ?def show_calendar(self):
? ? ? ?# 清空日歷表格
? ? ? ?for widget in self.table.winfo_children():
? ? ? ? ? ?widget.destroy()

? ? ? ?# 獲取當前月份的日歷
? ? ? ?cal = calendar.monthcalendar(int(self.year_var.get()), int(self.month_var.get()))

? ? ? ?# 添加表頭
? ? ? ?headers = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']
? ? ? ?for i in range(7):
? ? ? ? ? ?label = tk.Label(self.table, text=headers[i], font=('Arial', 12))
? ? ? ? ? ?label.grid(row=0, column=i, padx=5, pady=5)

? ? ? ?# 添加日期
? ? ? ?for i in range(len(cal)):
? ? ? ? ? ?for j in range(7):
? ? ? ? ? ? ? ?day = cal[i][j]
? ? ? ? ? ? ? ?if day != 0:
? ? ? ? ? ? ? ? ? ?button = tk.Button(self.table, text=str(day), font=('Arial', 12), width=3, height=2)
? ? ? ? ? ? ? ? ? ?button.grid(row=i+1, column=j, padx=5, pady=5)
? ? ? ? ? ? ? ? ? ?button.bind('<Button-1>', lambda event, date=datetime.date(int(self.year_var.get()), int(self.month_var.get()), day): self.show_memo(event, date))

? ? ? ?# 更新日期標簽
? ? ? ?self.date_label.config(text=f'{self.year_var.get()}年{self.month_var.get()}月')

? ?def show_memo(self, event, date):
? ? ? ?# 創(chuàng)建備忘錄窗口
? ? ? ?memo_window = tk.Toplevel(self.root)
? ? ? ?memo_window.title(f'{date}備忘錄')

? ? ? ?# 創(chuàng)建備忘錄文本框
? ? ? ?memo_text = tk.Text(memo_window, font=('Arial', 16))
? ? ? ?memo_text.pack(padx=20, pady=20)

? ? ? ?# 加載備忘錄內(nèi)容
? ? ? ?try:
? ? ? ? ? ?with open(f'{date}.txt', 'r') as f:
? ? ? ? ? ? ? ?memo_text.insert(tk.END, f.read())
? ? ? ?except FileNotFoundError:
? ? ? ? ? ?pass

? ? ? ?# 創(chuàng)建保存按鈕
? ? ? ?save_button = tk.Button(memo_window, text='保存', font=('Arial', 16), command=lambda: self.save_memo(date, memo_text.get('1.0', tk.END)))
? ? ? ?save_button.pack(pady=20)

? ?def save_memo(self, date, content):
? ? ? ?# 保存?zhèn)渫泝?nèi)容
? ? ? ?with open(f'{date}.txt', 'w') as f:
? ? ? ? ? ?f.write(content)

? ?def go(self):
? ? ? ?# 顯示指定月份的日歷
? ? ? ?self.show_calendar()

? ?def run(self):
? ? ? ?# 運行程序
? ? ? ?self.root.mainloop()

if __name__ == '__main__':
? ?app = CalendarApp()
? ?app.run()

按Ctrl+Shift+F10運行一下,

在文本框內(nèi)輸入日期和月份后點擊Go即可跳轉到該月份,這里最多能夠從公元元年到9999年任意一個月份,如下圖所示,真正實現(xiàn)了萬年歷。

點擊某一個日期,能夠添加備忘錄。

感興趣的同學在IDE里嘗試一下吧。


python程序25:寫一個應用實例–萬年歷的評論 (共 條)

分享到微博請遵守國家法律
合山市| 大姚县| 凌云县| 邢台县| 都匀市| 永宁县| 开鲁县| 海南省| 白银市| 土默特左旗| 罗城| 洛南县| 贺州市| 佛坪县| 桃园县| 小金县| 阳泉市| 麻栗坡县| 科尔| 福鼎市| 思茅市| 莱阳市| 于都县| 保康县| 潼关县| 木里| 敖汉旗| 邹平县| 厦门市| 新津县| 镇坪县| 玉山县| 水城县| 合作市| 福建省| 郸城县| 通榆县| 屏东市| 高密市| 准格尔旗| 西平县|