python - 有没有办法在 python 中检测 2 个小部件上的 FocusOut 事件
问题描述
我想要的是只要我在 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()
如果您运行代码,那么您单击 DateEntry 的箭头,这个被破坏了,我希望这个保留在那里,直到您单击窗口中其他要被破坏的地方。
解决方案
如果我理解正确,您希望在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 键更改焦点并查看。
推荐阅读
- java - 如何在 Apache Camel 中使用动态索引将列表中的项目获取为简单语句?
- assembly - 从 nasm 转换为 gas 组装语法
- javascript - 使用Javascript删除所有项目后如何显示“购物车为空”?
- excel - 如何保护某些范围?
- python - Python 排序列表插入
- html - 带有动态 Wordpress 内容的 CSS 首字下沉
- python - While 循环给出的值等于,即使它明确声明“小于”而不是“小于或等于”
- linux - 从bash中分隔符之间的文件中提取多行文本
- ios - 使用 BigSur 在 Xcode 上的导航器和检查器行为
- php - PHP S3下载:将巨大的文本变量回显到带有标题的浏览器下载