Python 将 tkcalendar 与 if 语句一起使用
Python using tkcalendar with if-statements
我正在尝试使用 tkcalendar 制作 if 语句,但不知道为什么它不起作用。
from tkinter import *
from tkcalendar import *
import datetime
root = Tk()
root.title('Hi')
root.geometry('500x400')
cal = Calendar(root, date_pattern="d/m/y", year = 2020, month = 11, day = 1)
cal.pack(pady=20)
def grab_date():
my_label.config(text = cal.get_date())
d = cal.get_date()
print(d)
if datetime.datetime.strptime('01/11/2020', "%d/%m/%Y").strftime("%d/%m/%Y")
<=d<=datetime.datetime.strptime('01/1/2021', "%d/%m/%Y").strftime("%d/%m/%Y"):
print('ok')
my_button = Button(root, text = 'Get date', command = grab_date)
my_button.pack()
my_label = Label(root, text = ' ')
my_label.pack(pady = 20)
root.mainloop()
当我在日期之间按下按钮时,它不打印 'ok'。有谁知道我如何解决这个问题以及使用 tkcalendar 时如何完成 if 语句?然后我想添加更多条件,当按下其他日期时打印其他内容。
考虑下面的例子。
import datetime
def betweenDates(date,start,end):
return (date>start) and (date<end)
start = datetime.datetime.strptime('01/11/2020', "%d/%m/%Y").date()
end = datetime.datetime.strptime('01/1/2021', "%d/%m/%Y").date()
today = datetime.datetime.now().date()
if betweenDates(today,start,end):
print("Ok")
这将使用函数比较今天的日期以查看它是否介于两个指定日期之间(使 if 语句行更短并且比较可重复使用)。
要使用 tkcalendar 执行此操作,您需要将日期从它转换为 datetime 对象(或者因为您要删除时间,一个 datetime.date 对象)
因为 tkcalendar returns 一个字符串你需要使用 strptime 来解析它。可能看起来像这样
d = datetime.datetime.strptime(cal.get_date(),"%d/%m/%Y").date()
希望能帮助您使代码正常工作
编辑:您的函数可能如下所示。但是由于缺少安装的 tkcalendar 未经测试
def grab_date():
my_label.config(text = cal.get_date())
d = datetime.datetime.strptime(cal.get_date(),"%d/%m/%Y").date()
print(d)
start = datetime.datetime.strptime('01/11/2020', "%d/%m/%Y").date()
end = datetime.datetime.strptime('01/1/2021', "%d/%m/%Y").date()
if betweenDates(d,start,end):
print('ok')
我正在尝试使用 tkcalendar 制作 if 语句,但不知道为什么它不起作用。
from tkinter import *
from tkcalendar import *
import datetime
root = Tk()
root.title('Hi')
root.geometry('500x400')
cal = Calendar(root, date_pattern="d/m/y", year = 2020, month = 11, day = 1)
cal.pack(pady=20)
def grab_date():
my_label.config(text = cal.get_date())
d = cal.get_date()
print(d)
if datetime.datetime.strptime('01/11/2020', "%d/%m/%Y").strftime("%d/%m/%Y")
<=d<=datetime.datetime.strptime('01/1/2021', "%d/%m/%Y").strftime("%d/%m/%Y"):
print('ok')
my_button = Button(root, text = 'Get date', command = grab_date)
my_button.pack()
my_label = Label(root, text = ' ')
my_label.pack(pady = 20)
root.mainloop()
当我在日期之间按下按钮时,它不打印 'ok'。有谁知道我如何解决这个问题以及使用 tkcalendar 时如何完成 if 语句?然后我想添加更多条件,当按下其他日期时打印其他内容。
考虑下面的例子。
import datetime
def betweenDates(date,start,end):
return (date>start) and (date<end)
start = datetime.datetime.strptime('01/11/2020', "%d/%m/%Y").date()
end = datetime.datetime.strptime('01/1/2021', "%d/%m/%Y").date()
today = datetime.datetime.now().date()
if betweenDates(today,start,end):
print("Ok")
这将使用函数比较今天的日期以查看它是否介于两个指定日期之间(使 if 语句行更短并且比较可重复使用)。
要使用 tkcalendar 执行此操作,您需要将日期从它转换为 datetime 对象(或者因为您要删除时间,一个 datetime.date 对象)
因为 tkcalendar returns 一个字符串你需要使用 strptime 来解析它。可能看起来像这样
d = datetime.datetime.strptime(cal.get_date(),"%d/%m/%Y").date()
希望能帮助您使代码正常工作
编辑:您的函数可能如下所示。但是由于缺少安装的 tkcalendar 未经测试
def grab_date():
my_label.config(text = cal.get_date())
d = datetime.datetime.strptime(cal.get_date(),"%d/%m/%Y").date()
print(d)
start = datetime.datetime.strptime('01/11/2020', "%d/%m/%Y").date()
end = datetime.datetime.strptime('01/1/2021', "%d/%m/%Y").date()
if betweenDates(d,start,end):
print('ok')