0

我正在尝试找到一种方法来突出显示 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 

每当我尝试选择日期时。

4

1 回答 1

1

问题:有没有办法在 tkcalendar 中将 calevents 添加到 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()
于 2019-10-28T14:09:29.207 回答