我需要一个笔记本类,因为我想创建框架实例,然后添加到其中。问题是ttk。笔记本需要root窗口,我不知道如何给他顶级root主机。
这就是代码:
class Notebook:
def __init__(self,parent):
super().__init__(parent)
self.notebook=ttk.Notebook(parent) #if i give this, the program will add the notebook to the main window
self.notebook.grid(row=1,column=0)
def add_tab(self,title):
frame=ttk.Frame(self.notebook,width=1280, height=280)
frame.pack(fill='both',expand=True)
self.notebook.add(frame,text=title)
tx=tk.Text(frame)
tx.pack()
class MainChat(tk.Toplevel):
def __init__(self, parent):
super().__init__(parent)
self.master=parent
self.title("Test")
self.iconbitmap("icon.ico")
self.resizable(False,False)
self.columnconfigure(0,weight=1)
self.createwidg()
def createwidg(self):
self.titlelb=ttk.Label(self,text="Test",font=("Helvetica",16))
self.nb1=Notebook(self.master)
self.titlelb.grid(row=0,column=0,pady=(10,0))
self.nb1.add_tab('Test')
主要问题:您需要
Notebook(self)
无.master
第二个问题:您的class Notebook
不是真正的tkinter小部件,因此它不需要super().__init__(parent)
,而是标准的super().__init__()
。甚至你也可以跳过这一行。
最小工作代码:
import tkinter as tk
from tkinter import ttk
class Notebook:
def __init__(self, parent):
#super().__init__(parent) # no need it
self.notebook = ttk.Notebook(parent)
self.notebook.grid(row=1, column=0)
def add_tab(self, title):
frame = ttk.Frame(self.notebook, width=1280, height=280)
frame.pack(fill='both', expand=True)
self.notebook.add(frame, text=title)
tx = tk.Text(frame)
tx.pack()
class MainChat(tk.Toplevel):
def __init__(self, parent):
super().__init__(parent)
self.master = parent
self.title("Test")
#self.iconbitmap("icon.ico")
self.resizable(False, False)
self.columnconfigure(0, weight=1)
self.createwidg()
def createwidg(self):
self.titlelb = ttk.Label(self, text="Test", font=("Helvetica", 16))
self.titlelb.grid(row=0, column=0, pady=(10, 0))
self.nb1 = Notebook(self) # without `.master`
self.nb1.add_tab('Test')
def run():
MainChat(root)
if __name__ == '__main__':
root = tk.Tk()
b = tk.Button(root, text="Chat", command=run)
b.grid(row=0, column=0)
root.mainloop()
BTW:
PEP8——Python代码的样式指南
即。=
周围的空间,,
之后的空间