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

如何使Notebook标签内按钮触发的addBox在同框架内生成Entry

解决Entry显示在框架外的问题

嘿,我一眼就看出问题所在啦!你点击按钮生成的Entry之所以跑到框架外面,是因为你在addBox函数里创建Entry时,把它的父组件设成了root(主窗口),而不是我们需要的page1标签页框架。Tkinter里每个组件的父容器直接决定了它会显示在哪个区域,所以咱们只要改这一点就行。

具体修改步骤

  • 在addBox函数里,把创建Entry的代码从ent = Entry(root)改成ent = Entry(page1),这样Entry就会被放到page1框架里面了。
  • 如果你想让Entry和按钮一样宽、布局更美观,可以给pack()加上fill="x"参数,让它自动填充框架的水平空间,再加个pady小间距避免组件挤在一起。

修改后的完整代码

from tkinter import *
import tkinter.ttk as ttk
# 注释掉background模块(若你本地有该模块可自行解开)
# import background as background

#------------------------------------
def addBox():
 print ("ADD")
 # 关键修改:将父组件从root改为page1,优化pack参数提升布局效果
 ent = Entry(page1)
 ent.pack(fill="x", pady=2)
 all_entries.append( ent )
#------------------------------------
all_entries = []
root = Tk()
root.title('Notebook Demo')
# 设置GUI窗口尺寸与位置
w = 600
h = 400
sw = root.winfo_screenwidth()
sh = root.winfo_screenheight()
x = (sw - w) / 2
y = (sh - h) / 2
root.geometry('%dx%d+%d+%d' % (w, h, x, y))
root.config(background = '#A9A9A9')
rows = 0
while rows < 50:
 root.rowconfigure(rows, weight=1)
 root.columnconfigure(rows, weight=1)
 rows += 1
nb = ttk.Notebook(root)
page1 = ttk.Frame(nb)
nb.add(page1, text='RDT & On-Air')
page2 = ttk.Frame(nb)
nb.add(page2, text='Existing Sites')
page3 = ttk.Frame(nb)
nb.add(page3, text='All Data')
# 移除重复的nb.pack()调用,仅需一次即可让Notebook填充整个窗口
nb.pack(expand = 1, fill = "both")

btn1 = ttk.Button(page1, text = "Add Site Code", command=addBox)
btn1.pack(fill="x", padx=10, pady=10)  # 给按钮添加边距,布局更舒适
root.mainloop()

另外我还帮你优化了一处小细节:之前你重复调用了三次nb.pack(),其实只需要调用一次就能让Notebook填充整个窗口,多余的调用可以删掉,让代码更整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:47:39