Tkinter Toplevel не закроется - PullRequest
0 голосов
/ 07 мая 2020

Я делаю небольшое приложение на 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()

Почему только одна запись работает правильно, если они обе используют один и тот же класс? Как я могу это исправить?

Любая помощь будет принята с благодарностью.

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