Tkcalendar 移动焦点后清除 DateEntry
Tkcalendar clear DateEntry after moving focus
我有一个 DateEntry 小部件和一个用于清除 DateEntry 内容的按钮。我希望 DateEntry 为空,除非用户 select 是一个日期。
我的问题是,如果我 select 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 的自动完成,那也可以解决我的问题。
最简单的方法是将 delete
方法延迟 1 毫秒:
def clearDateEntry():
clearButton.focus_set()
root.after(1, myDateEntry.delete, 0,END)
DateEntry
设置为在聚焦时验证条目内容(validate
选项设置为'focusout'),如果内容不是有效日期,则为今天的日期放在条目中。这个想法是在条目中始终有一个有效日期。
因此您可以通过设置
简单地摆脱这种行为
myDateEntry.configure(validate='none')
通过这种方式,条目内容不再在聚焦时进行验证,但在单击下拉按钮时仍会进行验证,因此在显示日历时应该不会出现无效日期的问题。
我有一个 DateEntry 小部件和一个用于清除 DateEntry 内容的按钮。我希望 DateEntry 为空,除非用户 select 是一个日期。
我的问题是,如果我 select 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 的自动完成,那也可以解决我的问题。
最简单的方法是将 delete
方法延迟 1 毫秒:
def clearDateEntry():
clearButton.focus_set()
root.after(1, myDateEntry.delete, 0,END)
DateEntry
设置为在聚焦时验证条目内容(validate
选项设置为'focusout'),如果内容不是有效日期,则为今天的日期放在条目中。这个想法是在条目中始终有一个有效日期。
因此您可以通过设置
简单地摆脱这种行为myDateEntry.configure(validate='none')
通过这种方式,条目内容不再在聚焦时进行验证,但在单击下拉按钮时仍会进行验证,因此在显示日历时应该不会出现无效日期的问题。