如何在Tkinter的notebook组件中新建标签页且不覆盖原有标签页
问题修复方案
根因说明
Tkinter 中每个UI组件实例只能归属一个父容器,同一时间仅能在一个位置渲染。你当前代码中直接复用已绑定到Tab1的Frame1实例添加为新标签页,本质是将该Frame从原有Tab1移动到新的Tab3,因此会出现原有Tab1内容被清空的问题。你需要的是生成结构完全一致的全新Frame实例,而非复用旧实例。
修复后完整代码
# Imports from tkinter import * from tkinter import ttk # Screen root = Tk() root.geometry("600x600") root.title("Example") # 封装生成Tab内容Frame的可复用函数,每次调用返回全新实例 def create_tab_content(parent): frame = Frame(parent, width=500, height=500, bg="Orange") # 给新生成的Frame也添加对应的新增按钮 ExampleButton = Button(frame, text="Click Here to Add New Tab to notebook", command=CreateANewTabFunc) ExampleButton.pack() return frame # Create New Tab Function def CreateANewTabFunc(): # 每次新增Tab都生成全新的Frame实例 new_tab_frame = create_tab_content(TabControl) TabControl.add(new_tab_frame, text=f"Tab {len(TabControl.tabs()) + 1}") # 自动生成Tab序号 # Tab Control - Used for Placing the Tabs TabControl = ttk.Notebook(root) TabControl.pack() # Frame 1 = Main Frame 调用封装函数生成 Frame1 = create_tab_content(TabControl) Frame1.pack() # Frame 2 = Settings or Something Else Frame2 = Frame(TabControl, width=500, height=500, bg="Green") Frame2.pack() TabControl.add(Frame1, text="Tab 1") TabControl.add(Frame2, text="Tab 2") # Mainloop root.mainloop()
关键改动点
- 封装了
create_tab_content公共函数,每次调用都会生成结构完全相同的全新Frame实例,避免复用同一实例 - 新增Tab时调用该函数生成新Frame,再添加到Notebook中
- 自动计算标签序号,后续多次点击按钮也可以持续生成新的Tab,序号不会重复
内容的提问来源于stack exchange,提问作者Skcoder
相关产品推荐
相关产品推荐

