Tkcalendar移动焦点后清除日期条目

2024-05-16 21:52:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个DateEntry小部件和一个按钮来清除DateEntry内容。我希望DateEntry为空,除非用户选择日期

我的问题是,如果我选择DateEntry小部件并给它焦点,那么第一次使用clear按钮是不起作用的,因为DateEntry在失去焦点后会自动完成

例如:

from tkinter import *
from tkinter import ttk
from tkcalendar import DateEntry

def clearDateEntry():
    clearButton.focus_set()
    myDateEntry.delete(0,END)

root=Tk()

myDateEntry=DateEntry(root)
myDateEntry.pack()
myDateEntry.delete(0,END)

clearButton=Button(root,text='clear',command=clearDateEntry)
clearButton.pack()

root.mainloop()

复制:给DateEntry焦点,然后单击clear

clearDateEntry()函数中,我首先将焦点移动到clear按钮,我希望它会触发auto complete(自动完成),这样我就可以直接删除它,但这不起作用

如何使clearDateEntry()在第一次执行时实际清除日期条目?如果有一种方法可以关闭DateEntry的自动完成功能,这也可以解决我的问题


Tags: fromimport部件tkinterrootdelete按钮pack
2条回答

DateEntry设置为在焦点输出时验证条目内容(validate选项设置为“focusout”),如果内容不是有效日期,则将今天的日期放入条目中。其想法是在条目中始终有一个有效的日期

因此,您可以通过设置

myDateEntry.configure(validate='none')

这样,条目内容不再在焦点输出时验证,但在单击下拉按钮时仍将验证,因此在显示日历时不应出现无效日期的问题

最简单的方法是将delete方法延迟1毫秒:

def clearDateEntry():
    clearButton.focus_set()
    root.after(1, myDateEntry.delete, 0,END)

相关问题 更多 >