import time # 获取当前时间并格式化 current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 在终端输出当前时间 print("当前时间:", current_time) # 引入Tkinter库 import tkinter as tk # 创建一个窗口 window = tk.Tk() window.geometry('300x300') window.title('电子日历') # 在窗口中添加一个Label,显示当前日期和时间 current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) time_label = tk.Label(window, text=current_time) time_label.pack() # 添加一个按钮,点击后可以显示当天相隔的天数 def show_diff_days(): today = datetime.datetime.today() selected_day = calendar.selection_get() diff = (selected_day - today).days tk.messagebox.showinfo('相隔天数', f'距离今天相隔{diff}天') diff_btn = tk.Button(window, text='计算与今天相隔天数', command=show_diff_days) diff_btn.pack() # 在窗口中添加一个日历控件,让用户可以选择日期 import calendar import datetime from tkinter import messagebox as messagebox def show_selected_date(): selected_day = calendar.selection_get() messagebox.showinfo('选择日期', f'您选择了日期:{selected_day}') calendar = calendar.Calendar(window) calendar.pack() ok_btn = tk.Button(window, text='确认', command=show_selected_date) ok_btn.pack() # 运行窗口 window.mainloop() # 引入SQLite3库 import sqlite3 # 创建或连接到数据库 conn = sqlite3.connect('calendar.db') # 创建用户事件表格 conn.execute('''CREATE TABLE events (ID INTEGER PRIMARY KEY AUTOINCREMENT, DATE TEXT NOT NULL, EVENT TEXT NOT NULL, REMIND_TIME TEXT);''') # 在表格中插入用户事件数据 def add_event(date, event, remind_time): conn.execute(f"INSERT INTO events (DATE,EVENT,REMIND_TIME) \ VALUES ('{date}','{event}','{remind_time}')") conn.commit()
时间: 2024-02-29 12:53:09 浏览: 188
这段代码是一个完整的电子日历程序,包含了当前时间显示、日历控件、事件添加等功能,但是在添加事件的函数`add_event()`中,SQL语句直接使用了字符串拼接,存在SQL注入的风险,建议使用参数化查询的方式来避免这个问题:
```python
# 在表格中插入用户事件数据
def add_event(date, event, remind_time):
conn.execute("INSERT INTO events (DATE,EVENT,REMIND_TIME) VALUES (?,?,?)", (date, event, remind_time))
conn.commit()
```
另外,这段代码在使用`messagebox`时,应该使用`tk.messagebox`来避免命名冲突:
```python
from tkinter import messagebox as tk_messagebox
def show_selected_date():
selected_day = calendar.selection_get()
tk_messagebox.showinfo('选择日期', f'您选择了日期:{selected_day}')
```
综上所述,以下是经过修改后的代码:
```python
import time
import tkinter as tk
import datetime
import calendar
import sqlite3
from tkinter import messagebox as tk_messagebox
# 获取当前时间并格式化
current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# 在终端输出当前时间
print("当前时间:", current_time)
# 创建一个窗口
window = tk.Tk()
window.geometry('300x300')
window.title('电子日历')
# 在窗口中添加一个Label,显示当前日期和时间
current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
time_label = tk.Label(window, text=current_time)
time_label.pack()
# 添加一个按钮,点击后可以显示当天相隔的天数
def show_diff_days():
today = datetime.datetime.today().date()
selected_day = calendar.selection_get()
diff = (selected_day.date() - today).days
tk_messagebox.showinfo('相隔天数', f'距离今天相隔{diff}天')
diff_btn = tk.Button(window, text='计算与今天相隔天数', command=show_diff_days)
diff_btn.pack()
# 在窗口中添加一个日历控件,让用户可以选择日期
def show_selected_date():
selected_day = calendar.selection_get()
tk_messagebox.showinfo('选择日期', f'您选择了日期:{selected_day}')
calendar = calendar.Calendar(window)
calendar.pack()
ok_btn = tk.Button(window, text='确认', command=show_selected_date)
ok_btn.pack()
# 创建或连接到数据库
conn = sqlite3.connect('calendar.db')
# 创建用户事件表格
conn.execute('''CREATE TABLE IF NOT EXISTS events
(ID INTEGER PRIMARY KEY AUTOINCREMENT,
DATE TEXT NOT NULL,
EVENT TEXT NOT NULL,
REMIND_TIME TEXT);''')
# 在表格中插入用户事件数据
def add_event(date, event, remind_time):
conn.execute("INSERT INTO events (DATE,EVENT,REMIND_TIME) VALUES (?,?,?)", (date, event, remind_time))
conn.commit()
# 运行窗口
window.mainloop()
```
这段代码通过使用参数化查询,避免了SQL注入的问题,同时使用`tk_messagebox`来避免了命名冲突。
阅读全文