notebook.add() returns 错误 window 路径名

notebook.add() returns bad window path name

我正在尝试让一个 ttk 笔记本根据 2 类 显示 2 个标签,代码如下:

import tkinter as tk
from tkinter import ttk


class Dashboard:
    def __init__(self,master):
        self.master = master
        self.frame = tk.Frame(self.master, width = 400, height = 400, bg = "red")
        self.frame.pack(expand = True)
class Options :
    def __init__(self,master):
        self.master = master
        self.frame = tk.Frame(self.master, width = 400, height = 400, bg = "blue")
        self.frame.pack(expand = True)
class Tabs:
    def __init__(self,master):
        self.master = master
        self.notebook = ttk.Notebook(self.master)
        self.options = Options(self.notebook)
        self.dashboard = Dashboard(self.notebook)
        self.notebook.add(self.options)
        self.notebook.add(self.dashboard)
        self.notebook.pack(pady=10, expand=True)


class MainGUI:
    def __init__(self,master):
        self.master = master
        self.tabs = Tabs(self.master)


if __name__ == '__main__':
    root = tk.Tk()
    gui = MainGUI(root)
    root.mainloop()

但是,当我 运行 出现此错误时(仅当我尝试使用 ttk.Notebook 的“添加”方法时才会发生):_tkinter.TclError: bad window path name "<__main__.Options object at 0x0000016E51653DC0>"

我不明白为什么我的语法错误,有人可以帮我解决这个问题吗? 非常感谢!!

子窗格小部件通常是一个 Frame 或子class。我不确定你在做什么,但你可以通过从 tkinter Frame class 像这样:

import tkinter as tk
from tkinter import ttk


class Dashboard(tk.Frame):
    def __init__(self,master):
        super().__init__(master)
        self.frame = tk.Frame(self.master, width=400, height=400, bg="red")
        self.frame.pack(expand=True)


class Options(tk.Frame):
    def __init__(self,master):
        super().__init__(master)
        self.frame = tk.Frame(self.master, width=400, height=400, bg="blue")
        self.frame.pack(expand=True)

class Tabs:
    def __init__(self,master):
        self.master = master
        self.notebook = ttk.Notebook(self.master)
        self.options = Options(self.notebook)
        self.dashboard = Dashboard(self.notebook)
        self.notebook.add(self.options)
        self.notebook.add(self.dashboard)
        self.notebook.pack(pady=10, expand=True)


class MainGUI:
    def __init__(self,master):
        self.master = master
        self.tabs = Tabs(self.master)


if __name__ == '__main__':
    root = tk.Tk()
    gui = MainGUI(root)
    root.mainloop()