Python 在ttk.Notebook的选项卡中使用小部件?

Python 在ttk.Notebook的选项卡中使用小部件?,python,tkinter,Python,Tkinter,我正在尝试显示一个带有两个选项卡的简单笔记本小部件。以下是我尝试的代码,其间没有任何不必要的代码: 将tkinter作为tk导入 从tkinter导入ttk color\u bg=“灰色20” font=“Lucida Sans打字机” 默认字体大小=16 类选项卡(tk.Frame): 定义初始化(自身,父级): tk.Frame.\uuuu init\uuuuu(自,父) self.parent=parent self.pack() self.textfield=tk.Text( 自我父母,

我正在尝试显示一个带有两个选项卡的简单笔记本小部件。以下是我尝试的代码,其间没有任何不必要的代码:

将tkinter作为tk导入
从tkinter导入ttk
color\u bg=“灰色20”
font=“Lucida Sans打字机”
默认字体大小=16
类选项卡(tk.Frame):
定义初始化(自身,父级):
tk.Frame.\uuuu init\uuuuu(自,父)
self.parent=parent
self.pack()
self.textfield=tk.Text(
自我父母,
字体=(字体,默认字体大小),
背景=颜色,
bd=10,
卸压=tk.扁平)
self.textfield.pack(fill=tk.BOTH,expand=True)
类选项卡显示(tk.Frame):
定义初始化(自身,父级):
tk.Frame.\uuuu init\uuuuu(自,父)
self.parent=parent
self.pack(fill=tk.BOTH,expand=True)
self.tabholder=ttk.Notebook(父级)
self.tabholder.pack(fill=tk.BOTH,expand=True,side=tk.TOP)
self.viewtab=Tab(self.tabholder)
self.edittab=Tab(self.tabholder)
self.tabholder.add(self.viewtab,text=“View”)
self.tabholder.add(self.edittab,text=“Edit”)
类main应用程序(tk.Frame):
定义初始化(自、父、*args、**kwargs):
tk.Frame.\uuuuu init\uuuuuu(self,parent,*args,**kwargs)
self.parent=parent
#设置大小和位置
self.x_pos=0
self.y_pos=0
self.width=self.parent.winfo_screenwidth()
self.height=self.parent.winfo_屏幕高度()
self.parent.geometry(f“{self.width}x{self.height}+{self.x_pos}+{self.y_pos}”)
self.parent.resizable=True
#添加小部件
self.tabdisplay=tabdisplay(self)
如果名称=“\uuuuu main\uuuuuuuu”:
root=tk.tk()
MainApplication(root).pack(fill=tk.BOTH,expand=True)
root.mainloop()
当我运行它时,它不会显示实际的笔记本。它只显示下面的两个选项卡。但是,当我将
Tab(self.tabholder)
替换为
tk.Frame(self.tabholder)
时,它可以完美地运行(除了不使用
Tab()
类的内容)

为什么我的
Tab()
class不能正确显示它?在我开始使用
ttk.Notebook()
之前,我从未遇到过继承自
tk.Frame
的类的问题。这是ttk的问题吗


编辑:我发现真正的罪魁祸首是
Tab()
类中的文本小部件。现在我的问题是为什么添加一个小部件会破坏笔记本?

想象一下像盒子一样的框架。您创建一个框,然后将小部件放入框中。仅在本例中,您是在框中创建小部件,但在将它们添加到
self.parent
而不是
self
时,将它们放在框外

当您创建一个继承自
tk.Frame
的类时,该类中的每个小部件都应该是
self
的直接子代或后代。这样,类的实例就变成了一个自包含的对象,可以是任何其他小部件的子对象

例如:

class Tab(tk.Frame):
    def __init__(self, parent):
        ...
        self.textfield = tk.Text(
            self, 
            ...
。。。以及:

class TabDisplay(tk.Frame):
    def __init__(self, parent):
        ...
        self.tabholder = ttk.Notebook(self)
        ...