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

Tkinter中Grid布局的sticky属性搭配grid_propagate不生效问题

问题原因

  • grid布局的sticky参数生效前提是:控件所在单元格的尺寸大于控件自身尺寸,才有多余空间供控件按照对齐规则摆放。你虽然固定了绿色Frame的大小,但Frame内部grid布局的第0列默认权重为0,只会自动适配内部蓝色Canvas的宽度,单元格与Canvas尺寸完全一致,没有多余横向空间实现靠右对齐,因此sticky='e'没有生效。

修复方案

只需在创建绿色Frame后,给它的第0列设置非0权重,让列占满整个Frame的横向空间即可,修改后参考代码如下:

from tkinter import *

# init root
root = Tk()

# get window size
windowWidth = root.winfo_screenwidth()
windowHeight = root.winfo_screenheight()

# create green frame
greenFrame = Frame(root,width=windowWidth, height=windowHeight/2, borderwidth = 0, highlightthickness = 0, bg='green')
greenFrame.grid_propagate(0) # fixed size
greenFrame.grid(row=0, column = 0)
# 新增配置:给第0列设置权重,让列占满Frame横向空间
greenFrame.grid_columnconfigure(0, weight=1)

# create blue canvas inside green frame
blueCanvas = Canvas(greenFrame, width=windowWidth/5, height=windowHeight/2, borderwidth = 0, highlightthickness = 0, bg='blue')
blueCanvas.grid(row=0, column = 0, sticky = 'e') # display it on the right side

# run loop
root.mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:18:02