Python Tkinter-如何将笔记本类添加到tk.toplevel中



我需要一个笔记本类,因为我想创建框架实例,然后添加到其中。问题是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代码的样式指南

即。=周围的空间,,之后的空间

最新更新