Python Tkinter类方法中创建Notebook组件不显示的问题
问题解决:Tkinter类方法中创建ttk.Notebook不显示的问题
问题原因
你把Notebook放在了Stakeholders这个Frame实例上,但这个Frame本身没有被添加到主窗口的布局管理器里(未调用pack()/grid()/place()),导致整个Frame不可见,里面的Notebook自然也无法显示。
第一种代码能正常显示,是因为直接把Notebook挂在了self.master(主窗口root)上,绕开了Frame的布局问题。
修正后的代码
只要给Stakeholders这个Frame实例添加布局即可,有两种实现方式:
方式一:在创建实例时添加布局
import tkinter as tk from tkinter import ttk class Stakeholders(tk.Frame): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.make_notebook() def make_notebook(self): self.notebook = ttk.Notebook(self) self.notebook.pack(pady=10, expand=True) frame1 = ttk.Frame(self.notebook, width=300, height=300) frame2 = ttk.Frame(self.notebook, width=300, height=300) frame1.pack(fill='both', expand=True) frame2.pack(fill='both', expand=True) self.notebook.add(frame1, text='Owner') self.notebook.add(frame2, text='Architect') def create_window(): root = tk.Tk() root.geometry('400x300') root.title('Stakeholders') app = Stakeholders(root) app.pack(fill='both', expand=True) # 关键:给Frame添加布局 root.mainloop() if __name__ == "__main__": create_window()
方式二:在类的__init__中给自己添加布局
import tkinter as tk from tkinter import ttk class Stakeholders(tk.Frame): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.pack(fill='both', expand=True) # 初始化时直接布局自身 self.make_notebook() def make_notebook(self): self.notebook = ttk.Notebook(self) self.notebook.pack(pady=10, expand=True) frame1 = ttk.Frame(self.notebook, width=300, height=300) frame2 = ttk.Frame(self.notebook, width=300, height=300) frame1.pack(fill='both', expand=True) frame2.pack(fill='both', expand=True) self.notebook.add(frame1, text='Owner') self.notebook.add(frame2, text='Architect') def create_window(): root = tk.Tk() root.geometry('400x300') root.title('Stakeholders') Stakeholders(root) root.mainloop() if __name__ == "__main__": create_window()
补充说明
Tkinter中所有组件都必须通过布局管理器(pack/grid/place)挂载到父容器上,才能被渲染显示。当你把Notebook作为Frame的子组件时,Frame本身也需要被布局到它的父容器(此处为主窗口root)中,否则整个Frame及其子组件都会处于不可见状态。
内容的提问来源于stack exchange,提问作者David Collins
相关产品推荐
相关产品推荐

