我试图找到一种在tkcalendar的DateEntry类上突出显示特定日期的方法。
这是在Python 3上运行的。它可以与tkcalendar的Calendar类一起成功使用,但似乎不适用于DateEntry类。
import tkinter as tk
from tkinter import ttk
from tkcalendar import Calendar, DateEntry
window = tk.Tk()
cal = DateEntry(window)
date = cal.datetime.today() + cal.timedelta(days=2)
cal.calevent_create(date, 'Hello World', 'message')
cal.tag_config('message', background='red', foreground='yellow')
cal.pack()
window.mainloop()
如果我们定义cal = Calendar(window),此方法有效,但是每当我尝试将其切换到DateEntry时都会失败。
复制评论:将cal更改为Calendar对象,然后添加:
de=DateEntry(window) de.pack() de.bind("<<DateEntrySelected>>", cal.calevent_create(date, 'Hello World', 'message'))
似乎对我没有用...我最终得到了
TypeError: 'int' object is not callable
每当我尝试选择日期时。
答案 0 :(得分:0)
问题:是否可以在tkcalendar中将日历事件添加到DateEntry?
否,DateEntry
是用于选择一个日期。
Calendar
用于根据日期保存日历事件。
您必须bind("<<DateEntrySelected>>", ...
,然后在def callback(...
中进行<ref to Calendar>.calevent_create(<selected date>, 'Hello ...'
import tkinter as tk
from tkcalendar import Calendar, DateEntry
window = tk.Tk()
def date_entry_selected(event):
w = event.widget
date = w.get_date()
print('Selected Date:{}'.format(date))
# <ref to Calendar>.calevent_create(date, 'Hello ...`)
cal.calevent_create(date, 'Hello ...'`)
cal = Calendar(window, selectmode='day', year=2019, month=10, day=28)
cal.pack(fill="both", expand=True)
de=DateEntry(window)
de.pack()
de.bind("<<DateEntrySelected>>", date_entry_selected)
window.mainloop()