pack_forget генерирует странное мерцание и не полностью скрывает виджет?

#python #tkinter

Вопрос:

Как я могу избавиться от странного поведения self.frame_control , когда я навожу курсор мыши на границу этого виджета, я получаю раздражающее мерцание, которое я не понимаю, почему это происходит? Большое спасибо.

Минимальный воспроизводимый пример:

 from tkinter import *  class Interface(Frame):  def __init__(self, master, *args, **kwargs):  super().__init__(master, *args, **kwargs)   self._motion_1 = False  self.x1 = 0  self.x2 = 100  self.y1 = 0  self.y2 = 50   self.control = Frame(self, bg='green')  self.control .pack(fill= 'both', expand= True)    self.lbl_change1 = Label(self.control, text='text 1', bg='black', fg='white', bd=0)  self.lbl_change1 .pack(side=LEFT, fill='both', expand=True, padx=10)  self.lbl_change2 = Label(self.control, text='text 2', bg='black', fg='white', bd=0)  self.lbl_change2 .pack(side=LEFT, fill='both', expand=True, padx=10)    #_______________  self.master.bind('lt;Motiongt;',self.open_frame)  self.master.bind('lt;Leavegt;', lambda arg: self.control .pack_forget())    def open_frame(self, event):  self.pointer_width_2 = event.x / self.master.winfo_width() * 100  self.pointer_height_2 = event.y / self.master.winfo_height() * 100   if not self._motion_1 == True:  if self.x1 lt;(self.pointer_width_2)lt; self.x2 and self.y1 lt;(self.pointer_height_2)lt; self.y2:   self.control .pack(fill= 'both', expand= True)  print('if')  else:  print('else')  self.control .pack_forget()   root = Tk() root .geometry('200x600 300 0') root .config(bg='gray22') frame = Interface(root) frame .pack() root .mainloop()  

Комментарии:

1. что ты хочешь, чтобы произошло? каково ожидаемое поведение?

2. существует 'lt;Entergt;' событие, противоположное 'lt;Leavegt;' этому, поэтому вы можете использовать это

3. @Matiiss Проблема в Enter том, что я не могу выбрать определенную часть окна, чтобы скрыть и отобразить виджет, только если мышь расположена над этой областью, должны быть выполнены эти инструкции, x1, x2, y1, y2 извините, я не знаю, правильно ли я выразился, я не знаю, правильно ли я использую термины. Что я пытаюсь сделать, так это показать виджет, если мышь находится над верхней половиной окна, и скрыть его, если он покидает эту половину или окно.

4. вы хотите ограничить доступ к определенной области или определенному виджету?

5. Вам нужно проверить, какой виджет запускает обратные вызовы событий. Я думаю, что вам нужно выполнить задачу только тогда, когда это событие инициируется root окном.