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

Tkinter Grid布局异常及Frame背景不显示问题求助

Tkinter布局问题解决

问题1:Frame黄色背景无法显示

你给leftside_area设置了宽高和黄色背景,但使用grid放入组件后,Frame会自动收缩到内部组件的尺寸,导致背景被完全覆盖。解决方法是禁用Frame的自动尺寸调整,在leftside_area.grid(...)之后添加:

leftside_area.grid_propagate(False)

如果希望main_area也保持设置的宽高,同样添加该行代码即可。

问题2:组件无法顶在Frame顶部

禁用自动尺寸调整后,需要给leftside_area的网格设置权重规则,让组件能正确对齐顶部。在创建photo_widget之前添加以下代码:

# 让第0列占满Frame的可用宽度
leftside_area.columnconfigure(0, weight=1)
# 让第1行占据剩余垂直空间,将第0行的组件顶至顶部区域
leftside_area.rowconfigure(1, weight=1)

同时把leftside_area.grid(...)中的sticky="ew"改为"nsew",让Frame填满主窗口分配的整个单元格,避免出现空白区域。

修改后的完整代码

import tkinter
from tkinter import *
from PIL import ImageTk, Image

app = Tk()
app.title("Test")
app.resizable(False,False)

# 配置主窗口两列平分宽度
app.columnconfigure(0, weight=1)
app.columnconfigure(1, weight=1)

# Left Side Area
leftside_area = Frame(app,width=250,height=450,bg="#ffde00")
leftside_area.grid(row=0,column=0,sticky="nsew")
leftside_area.grid_propagate(False)
# 配置左侧Frame的网格规则
leftside_area.columnconfigure(0, weight=1)
leftside_area.rowconfigure(1, weight=1)

# Main Area
main_area = Frame(app,width=450,height=450,bg="#8601af",border=-2)
main_area.grid(row=0,column=1,sticky="nsew")
main_area.grid_propagate(False)

# Photo (Left side)
photo = ImageTk.PhotoImage(Image.open("logo.png").resize((200,200)))
photo_widget = Label(leftside_area,image=photo,bg="#ffde00")
photo_widget.grid(row=0,column=0,sticky="new")

# Title (Left side)
title_widget = Label(leftside_area,text="test",bg="#ffde00")
title_widget.grid(row=1,column=0,sticky="w")

app.mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:57:22