Python Tkinter的Notebook使用.place布局时子控件不可见问题求助
问题根源
Tkinter的place布局管理器不会触发父控件的自动尺寸计算逻辑。你代码中作为标签页载体的两个objTTK.Frame实例(objSummaryTab、objSettingsTab)没有显式指定宽高,默认尺寸为0*0,所以内部用place摆放的Label自然无法渲染显示。
改用pack布局可以正常显示,是因为pack会自动计算子控件的总尺寸,反向撑开父Frame的大小,所以没有尺寸为0的问题。
解决方案
方案1:显式指定固定尺寸
创建标签页Frame时直接指定width和height参数,适配你的主窗口尺寸即可,修改后完整可运行代码如下:
import tkinter as objTK from tkinter import ttk as objTTK root = objTK.Tk() root.title("Tab Widget") # 先给Notebook指定对应尺寸,避免显示异常 tabControl = objTTK.Notebook(root, width=480, height=450) # 给每个标签页Frame设置和Notebook匹配的宽高 objSummaryTab = objTTK.Frame(tabControl, width=480, height=450) objSettingsTab = objTTK.Frame(tabControl, width=480, height=450) tabControl.add(objSummaryTab, text ='Summary') tabControl.add(objSettingsTab, text ='Settings') lb1 = objTTK.Label(objSummaryTab, text ="Summary") lb1.place(x=5, y=5) lb2 = objTTK.Label(objSettingsTab, text ="Settings") lb2.place(x=5, y=5) tabControl.place(x=5, y=5) root.bind("<Escape>", lambda _: root.destroy()) root.geometry("500x500") root.mainloop()
方案2:绑定事件动态适配尺寸
如果需要标签页跟随窗口/Notebook的大小自动调整,可以给tabControl绑定<Configure>事件,动态修改所有标签页的尺寸,不需要写死固定值,新增绑定逻辑的代码如下:
# 定义尺寸调整函数 def adjust_tab_size(event): # 遍历所有标签页,同步调整尺寸匹配Notebook的可用区域 for tab_id in tabControl.tabs(): tab_widget = tabControl.nametowidget(tab_id) tab_widget.config(width=event.width, height=event.height) # 在tabControl定义完成后添加绑定 tabControl.bind("<Configure>", adjust_tab_size)
内容的提问来源于stack exchange,提问作者Sandeep S D
相关产品推荐
相关产品推荐

