You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将TestApp类添加到Tkinter的Business标签页中?

可行性说明

完全可行,Tkinter没有限制将自定义Frame子类添加到ttk.Notebook的标签页中,只要正确设置组件的父容器关联即可。

原代码的问题

你的现有代码无法实现预期效果,问题出在TestApp类的初始化逻辑:

  • 调用Frame.__init__(self)时没有传入parent参数,导致这个Frame会默认创建一个新的顶层窗口(而不是嵌入到目标标签页)
  • 后续设置self.main.geometry、self.main.title都是针对这个新窗口的,和你要嵌入的Business标签页无关
修正后的代码
from tkinter import*
import random
import time
from tkinter import ttk
from pandastable import Table, TableModel

root = Tk()
root.geometry("1000x800+0+0")
tabControl = ttk.Notebook(root)
tab1 = ttk.Frame(tabControl)
tab2 = ttk.Frame(tabControl)
tab3 = ttk.Frame(tabControl)

tabControl.add(tab1, text='Recommendation')
tabControl.add(tab2, text='Business')
tabControl.add(tab3, text='Customer')

class TestApp(Frame):
    def __init__(self, parent=None):
        # 关键:将parent传入Frame的初始化方法,让当前Frame成为parent的子组件
        Frame.__init__(self, parent)
        self.parent = parent
        # 不需要创建新窗口,直接用当前Frame作为容器
        self.pack(fill=BOTH, expand=1)
        
        f = Frame(self)
        f.pack(fill=BOTH, expand=1)
        df = None
        self.table = pt = Table(f, dataframe=df,
                                showtoolbar=True, showstatusbar=True)
        pt.show()

# 创建TestApp实例,将tab2作为父容器,然后让它填充整个标签页
dataframe = TestApp(tab2)
dataframe.pack(fill=BOTH, expand=1)

tabControl.pack(expand=50, fill="both")
root.mainloop()
关键修改点
  • TestApp初始化时,将parent传递给Frame.__init__(self, parent),确保它是目标标签页的子组件
  • 移除了针对新窗口的geometry和title设置,因为嵌入组件不需要这些顶层窗口属性
  • 创建TestApp实例时传入tab2作为父容器,并通过pack(fill=BOTH, expand=1)让它填充整个标签页

内容的提问来源于stack exchange,提问作者theslasher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:41:58