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)
...