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

