Python tkinter Notebook多选项卡如何使Tab的title右侧存在关闭按钮

Python tkinter Notebook多选项卡如何使Tab的title右侧存在关闭按钮

Python tkinter.ttk 的 Notebook 多选项卡Tab标题的右侧是没有关闭按钮的,如何如同浏览器一样可点击关闭按钮关闭Tab?回答可以直接用 Button 代替,谢谢。

使用 tkinter.ttk Notebook 控件时,可以通过自定义每个选项卡的标题部分来实现关闭按钮。

这可以通过创建自己的标签页控件类来实现,该类包含一个按钮用于关闭选项卡,并将该类的实例作为标签页的标题。

import tkinter as tk
import tkinter.ttk as ttk

class TabTitle(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)
        self.label = tk.Label(self, text=kwargs.get("text", ""), font=("TkDefaultFont", 8))
        self.label.pack(side="left", fill="x", expand=True)
        self.close_button = tk.Button(self, text="X", command=kwargs.get("close_callback"))
        self.close_button.pack(side="right")

class NotebookWithCloseTab(ttk.Notebook):
    def __init__(self, parent, *args, **kwargs):
        ttk.Notebook.__init__(self, parent, *args, **kwargs)

    def add(self, frame, text="", close_callback=None):
        tab_title = TabTitle(self, text=text, close_callback=close_callback)
        self.add(frame, text=text, labelwidget=tab_title)

if __name__ == "__main__":
    root = tk.Tk()
    notebook = NotebookWithCloseTab(root)
    frame1 = tk.Frame(notebook)
    notebook.add(frame1, text="Tab 1", close_callback=lambda: notebook.forget(frame1))
    frame2 = tk.Frame(notebook)
    notebook.add(frame2, text="Tab 2", close_callback=lambda: notebook.forget(frame2))
    notebook.pack(fill="both", expand=True)
    root.mainloop()