Мне нужна вкладка для чтения некоторых данных из ttk.Notebook (или объекта / списка / dict / любого другого изменяемого файла, переданного в ttk.Notebook) при отображении и записи данных обратно, когда они ушли.Вот мой пример
class TestTabs():
class ManagerNotebook(ttk.Notebook):
def __init__(self, master):
ttk.Notebook.__init__(self, master)
self.bind("<<NotebookTabChanged>>", self.onTabChange)
self.visit_str = 'viewed'
self.leave_str = 'left'
self.prev_id = [None] #mutable list
def onTabChange(self, event):
current_id = [event.widget.index("current")]
event.widget.winfo_children()[current_id[0]].onVisibleIn(self, current_id[0], self.visit_str)
if self.prev_id[0] is not None:
event.widget.winfo_children()[self.prev_id[0]].onVisibleOut(self, self.prev_id[0], self.leave_str)
self.prev_id[0] = current_id[0]
class DispatcherTab(ttk.Frame):
def __init__(self, parent):
self.parent = parent
ttk.Frame.__init__(self, parent)
Label(self, text='Sample text').pack()
def onVisibleIn(self, parent, id, str):
print('%s is %s' % (parent.tab(id, 'text'), str))
def onVisibleOut(self, parent, id, str):
print('%s is %s' % (parent.tab(id, 'text'), str))
def __init__(self,root):
self.tabControl = self.ManagerNotebook(root)
self.mainTab = self.DispatcherTab(self.tabControl)
self.tabControl.add(self.mainTab, text='First tab')
self.nextTab = self.DispatcherTab(self.tabControl)
self.tabControl.add(self.nextTab, text='Second tab')
self.tabControl.pack(fill="both", expand=True)
def main():
tk_root = Tk()
test_gui = TestTabs(tk_root)
tk_root.mainloop()
if __name__ == '__main__':
main()
Есть ли более простой способ сделать то, что я хочу?