Методы pack() и pack_forget() в Tkinter

ЗИЛ

Новичок
Пользователь
Янв 3, 2022
43
1
8
ОС: Linux Mint 20.3
Имеем ttk.Notebook. На вкладках -- элементы Text().
Над ноутбуком -- панель инструментов(toolbar).
Задача -- при изменении текста во вкладке (не header, а текста в текстовом элементе) -- на тулбаре появляется метка другого цвета(background).
При переключении вкладок -- метка отображается только при выборе вкладки где был изменён текст.
Сам код прячу под спойлер(довольно объёмный):

Python:
from tkinter import Tk, Menu, Text, Label
from tkinter.ttk import Notebook
from PIL import Image, ImageTk
from tkinter.filedialog import askopenfile
import hashlib

text_list = []
def add_tab(parent, contents, name):
    text_num = Text()
    text_list.append(text_num)
    text = text_list[len(text_list) - 1]
    print("text_list=", text_list)
    parent.add(text_num, text=name)
    text.insert('end', contents)
    notebook.select(notebook.tabs()[-1])
    m = hashlib.md5(contents.encode())
    name_tab = name
    hash_tribe[name_tab] = m.digest()

def open_file():
    file = askopenfile(filetypes=[('Pyton file', '*.py'), ('Python files','*.pyw'), ('Python files', '*.pyc')])#в исходнике просто file
    if file:
        add_tab(notebook, file.read(), file.name.split('/')[-1])
       
hash_tribe ={}
def get_hash(event):
    flag_current = flag_tab.get('name_tab')
    print("flag_current=", flag_current)
    if flag_current == None:
        flag = 0
        pack_dange(flag)
    elif flag_current == 1:
        flag = 1
        pack_dange(flag)
    elif flag == 0:
        pack_dange(flag)
 
flag_tab = {}
def check(event):
    name_tab = notebook.tab(notebook.select(), 'text')
    activ_tab = notebook.nametowidget(notebook.select())
    content = activ_tab.get(1.0, 'end')
    hash_content = hashlib.md5(content.encode())
    hasht = hash_tribe.get(name_tab)
    if hash_content != hasht:
        flag = 1
        flag_tab[name_tab] = flag
        print("flag_tab=", flag_tab)
        pack_dange(flag)

def pack_dange(flag):
    if flag == 1:
        label.pack(side = 'right')
    elif flag == 0:
        label.pack_forget()

root = Tk()
root.minsize(width=700, height=600)
menu_bar = Menu(root)
file_menu = Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label='File', menu=file_menu)
file_menu.add_command(label='Open', command=open_file)

root.config(menu=menu_bar)
toolbar = Label(height = 2)
label = Label(toolbar, width=35, height=35, bg='orange')
toolbar.pack(side = 'top', fill = 'x')

notebook = Notebook(root, width=700, height=600)
notebook.bind('<<NotebookTabChanged>>', get_hash)
notebook.nametowidget(notebook.select()).bind('<KeyRelease>', check)
notebook.pack(fill='both', expand=True)

root.mainloop()

Отслеживать изменения получается, но вот при переключении вкладок метка не отображается как нужно.
Буду очень-очень благодарен за идеи.
 

Форум IT Специалистов