如何使ttk.Notebook页签在进入和离开时都生成事件?

2024-03-28 22:48:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一个选项卡,当显示时从ttk.Notebook(或者一个object/list/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()

有没有更简单的方法来做我想做的事


Tags: textselfeventidinitdefrootcurrent