Tkinter Frame添加Label后出现尺寸异常该如何修复
问题原因
tkinter的Frame容器默认开启**几何体传播(geometry propagation)**特性:当容器使用pack/grid布局管理子控件时,会自动忽略自身预设的width、height参数,调整自身尺寸刚好适配所有内部子控件。
你仅在单个Tab加Label时,另一个空Tab的Frame会维持预设尺寸;两个Tab都加Label后,两个Frame都被压缩到刚好容纳Label的大小,就会出现尺寸错乱的问题。
修复方案
给两个Tab的Frame关闭pack布局的几何体传播即可,仅需要添加2行代码:
tab1.pack_propagate(False) tab2.pack_propagate(False)
如果需要让选项卡区域占满整个窗口,还可以给ttk.Notebook的pack方法补充fill='both', expand=1参数。
修正后完整代码
from tkinter import * from tkinter import ttk root=Tk() root.title('Tab Widget') root.geometry('600x400') book=ttk.Notebook(root) book.pack(pady=2, fill='both', expand=1) tab1=Frame(book,width=600,height=500,bg='white') tab2=Frame(book,width=600,height=500,bg='white') # 关闭几何体传播,保留预设宽高 tab1.pack_propagate(False) tab2.pack_propagate(False) book.add(tab1,text='Tab 1') book.add(tab2,text='Tab 2') heading=Label(tab1,text='This is Tab 1',font='arial 20 bold',bg='white') heading2=Label(tab2,text='This is Tab 2',font='arial 20 bold',bg='white') heading.pack() heading2.pack() root.mainloop()
内容的提问来源于stack exchange,提问作者ZARIR
相关产品推荐
相关产品推荐

