Tkinter设置anchor、justify无效时如何对齐grid布局Label文本
Tkinter 同列Label文本左对齐实现方案
问题根源
你之前配置的anchor="w"、justify="left"仅能控制文本在Label控件自身内部的对齐逻辑,无法控制Label控件本身在布局中的位置。
使用grid布局时,同列的控件默认会在单元格内居中放置:你的两个Label文本长度不同,控件自身宽度随内容自适应,两个控件本身的左边缘就没对齐,哪怕内部文本贴住Label左边缘,最终视觉上两个文本的左边缘也会错位。
几个易混淆的布局参数作用区分:
anchor:控制控件内部内容相对于控件自身边界的位置,可选值为n/s/e/w等方位justify:控制多行文本的行之间的对齐方式,单行文本场景下配置该参数无效果sticky:grid布局专属参数,控制控件在所属网格单元格内的吸附对齐位置
修复方法
给两个Label的grid()方法新增sticky="w"参数即可,该参数会让Label控件吸附在所在网格单元格的左(西)边缘,两个控件都贴住同一侧对齐,文本左边缘自然就齐平了。
修正后的完整代码如下:
def settings(): newWindow = Toplevel(root) newWindow.title("Settings") newWindow.configure(bd=25) alertFrequencyText = Label( newWindow, text="Desktop Notification Frequency (In Minutes).", anchor="w" ) # 新增sticky="w"配置控件在单元格内左对齐 alertFrequencyText.grid(row=1, column=1, sticky="w") DiscordFrequency = Label( newWindow, text="Discord Alert Frequency", anchor="w" ) DiscordFrequency.grid(row=2, column=1, sticky="w")
可选优化
如果需要两个Label视觉宽度完全统一,可以给所在列配置横向拉伸规则,让Label占满整列宽度,此时你之前设置的anchor="w"会让文本始终贴在Label左边缘:
# 放在两个Label的grid配置之后即可,让第1列横向拉伸占满窗口可用宽度 newWindow.grid_columnconfigure(1, weight=1)
内容的提问来源于stack exchange,提问作者Dookiiiii
相关产品推荐
相关产品推荐

