Есть ли способ обнаружить событие FocusOut на 2 виджетов в Python - PullRequest
1 голос
/ 20 мая 2019

То, что я хочу, это иметь возможность свободно выбирать дату, пока я нахожусь в виджете 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, этот уничтожен, и я хочу, чтобы он оставался там до тех пор, пока вы не нажмете где-нибудь еще в окне, которое будет уничтожено.

1 Ответ

1 голос
/ 21 мая 2019

Если я правильно вас понимаю, вы хотите, чтобы 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, чтобы изменить фокус и посмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...