解决Tkinter Grid布局中跨列Label导致其他Label偏移的问题
解决Tkinter中Label布局被挤压的问题
嘿,这个tkinter布局的问题我太懂了!咱们先搞清楚为啥会出现这种情况:你的TITLE标签用了columnspan=2,占据了第0和第1列,超大的字体直接把这两列的宽度撑得特别宽。而第2列默认只会适配自己内容的宽度,所以整个窗口的宽度基本由前两列说了算,text1和text2自然就被挤到窗口右侧去了。
下面给你几个实用的解决方案,按需选就行:
方法一:让第2列自动填充剩余空间
给第2列设置权重,这样它会自动占据窗口的剩余空间,同时让text标签铺满单元格并居中显示:
from tkinter import * import tkinter.ttk master = Tk() # 设置TITLE标签,保持原来的columnspan=2 Label(master, text="TITLE", font=("Courier", 60)).grid(columnspan=2) # 给第2列设置权重,让它拉伸填充剩余空间 master.grid_columnconfigure(2, weight=1) # 放置text1和text2,用sticky="ew"让标签铺满单元格,文本默认居中 Label(master, text="text1").grid(column=2, row=1, sticky="ew") Label(master, text="text2").grid(column=2, row=2, sticky="ew") master.mainloop()
方法二:让TITLE横跨所有列,布局更均衡
如果希望整体布局更对称,可以把TITLE的columnspan改成3,然后给三列都设置权重,这样每列会平均分配窗口宽度:
from tkinter import * import tkinter.ttk master = Tk() # 让TITLE横跨3列 Label(master, text="TITLE", font=("Courier", 60)).grid(columnspan=3) # 给三列都设置相同权重,平均分配空间 master.grid_columnconfigure(0, weight=1) master.grid_columnconfigure(1, weight=1) master.grid_columnconfigure(2, weight=1) # 直接放置text1和text2,它们会自动在列中居中 Label(master, text="text1").grid(column=2, row=1) Label(master, text="text2").grid(column=2, row=2) master.mainloop()
方法三:固定前两列宽度,让第2列单独拉伸
要是不想改变TITLE的跨列设置,也可以把前两列的权重设为0(固定宽度),只让第2列拉伸:
from tkinter import * import tkinter.ttk master = Tk() Label(master, text="TITLE", font=("Courier", 60)).grid(columnspan=2) # 前两列固定宽度,第2列拉伸填充 master.grid_columnconfigure(0, weight=0) master.grid_columnconfigure(1, weight=0) master.grid_columnconfigure(2, weight=1) # 让text标签铺满单元格,文本居中 Label(master, text="text1").grid(column=2, row=1, sticky="ew") Label(master, text="text2").grid(column=2, row=2, sticky="ew") master.mainloop()
这几种方法都能让text1和text2正常居中显示,你可以根据自己的布局需求选最合适的~
内容的提问来源于stack exchange,提问作者toto1105
相关产品推荐
相关产品推荐

