Я делаю небольшое приложение на Tkinter, но столкнулся с некоторыми проблемами при использовании виджета Toplevel tkinter.
В моем приложении две записи. Когда я нажимаю на нижнюю запись, появляется Toplevel. Когда оно открыто и я щелкаю где-нибудь еще в главном окне, оно исчезает. Это то, чего я хочу. Чего я не могу понять, так это того факта, что когда я нажимаю на верхнюю запись, появляется Toplevel, но не закрывается при нажатии на главное окно.
Вот мой код:
import tkinter as tk
class FakeCombobox(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent, width=100, height=100)
self.box_open = False
self.entry = entry = tk.Entry(self, text='Hi')
entry.pack(side='left', expand=True, fill='both')
entry.bind('<Button-1>', self.get_width)
parent.bind('<Button-1>', self.focusout)
def get_width(self, event):
if not self.box_open:
self.box = box = tk.Toplevel()
self.box_open = True
else:
self.box.destroy()
self.box_open = False
def focusout(self, event):
for item in self.winfo_children():
if str(item) == str(event.widget):
return
try:
self.box.destroy()
self.box_open = False
except:
pass
if __name__ == '__main__':
root = tk.Tk()
combo = FakeCombobox(root)
combo.pack_propagate(0)
combo.grid()
combo2 = FakeCombobox(root)
combo2.pack_propagate(0)
combo2.grid()
root.mainloop()
Почему только одна запись работает правильно, если они обе используют один и тот же класс? Как я могу это исправить?
Любая помощь будет принята с благодарностью.