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
相关产品推荐
相关产品推荐

