有没有办法在python中的2个小部件上检测FocusOut事件

2024-09-24 22:32:48 发布

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

我想要的是,只要我在dateEntry小部件上,我就可以自由选择日期(即使我单击向下箭头,这一个也不会过时),如果我单击其他位置,则销毁最后一个(dateEntry)。在

问题是tkcalender是由多个小部件组成的,这就是为什么只在其中一个小部件上设置focusOut事件。在

from tkinter import *
from tkcalendar import DateEntry

def ok(e):
    print(cal.get_date())


root = Tk()
cal = DateEntry(root, year=2010)
cal.pack(padx=10, pady=10)
cal.bind('<FocusOut>', lambda e: cal.destroy())
cal.bind('<Return>', ok)  # validate with Enter
cal.focus_set()

root.mainloop()

如果你运行这段代码,然后你点击日期条目的箭头,这个被销毁了,我希望它一直呆在那里,直到你点击窗口中其他地方被销毁。在


Tags: fromimportbind部件tkinter事件okroot
1条回答
网友
1楼 · 发布于 2024-09-24 22:32:48

如果我理解正确,您希望在单击“打开日历”时不要销毁DateEntry。这可以通过检查当前焦点和pass如果当前焦点是Calendar对象来实现。在

import tkinter as tk
from tkcalendar import DateEntry, Calendar

def check_focus(event):
    current = root.focus_get()
    if not isinstance(current,Calendar):
        cal.destroy()

root = tk.Tk()

cal = DateEntry(root, year=2010)
cal.pack(padx=10, pady=10)
cal.bind('<FocusOut>', check_focus)
tk.Button(root,text="Click").pack()

root.mainloop()

试着按tab键来改变焦点,然后看。在

相关问题 更多 >