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

我的问题是,如果我选择DateEntry小部件并为其指定焦点,那么第一次使用清除按钮将不起作用,因为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焦点,然后单击清除。

clearDateEntry()函数中,我首先将焦点移到清除按钮,我希望该按钮会触发自动完成,因此我可以立即将其删除,但这是行不通的。

我如何使clearDateEntry()实际上第一次清除DateEntry?如果有办法关闭DateEntry的自动完成功能,那也可以解决我的问题。

最佳答案

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

因此,您可以通过设置简单地摆脱这种行为

myDateEntry.configure(validate='none')

这样,输入内容将不再针对焦点突出进行验证,但是在单击下拉按钮时仍将对其进行验证,因此在显示日历时不会出现无效日期的问题。

关于python - 移动焦点后,Tkcalendar清除DateEntry,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59607575/

10-12 22:24