ОС: Linux Mint 20.3
Имеем ttk.Notebook. На вкладках -- элементы Text().
Над ноутбуком -- панель инструментов(toolbar).
Задача -- при изменении текста во вкладке (не header, а текста в текстовом элементе) -- на тулбаре появляется метка другого цвета(background).
При переключении вкладок -- метка отображается только при выборе вкладки где был изменён текст.
Сам код прячу под спойлер(довольно объёмный):
Отслеживать изменения получается, но вот при переключении вкладок метка не отображается как нужно.
Буду очень-очень благодарен за идеи.
Имеем 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()
Отслеживать изменения получается, но вот при переключении вкладок метка не отображается как нужно.
Буду очень-очень благодарен за идеи.