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

如何调整Tkinter带滚动条的Frame使其完全填满界面中的黑色区域

要让带滚动条的Frame完全覆盖黑色区域,只需调整3处布局配置即可,修改后的完整可运行代码如下:

修改核心点

  • 调整外层容器wrapper1的pack参数,移除错误的上下边距配置,设置fill=BOTH让容器自动撑满右侧可用空间,上下边距调整为匹配背景黑色区域的75像素
  • 画布mycanvas的pack参数新增fill=BOTH和expand=True,让画布撑满整个wrapper1容器,取消固定宽高限制
  • 新增画布大小变化时的内部Frame宽度同步逻辑,保证内容宽度适配画布宽度,避免左右留空
from tkinter import *
from tkinter import ttk
C = Tk()
C.maxsize(1200, 750)
C.geometry("1200x750")
C.title("Mainscreen")
style = ttk.Style()
style.theme_use('clam')

# 素材路径替换为你本地的实际存储路径即可
BG = PhotoImage(file="Mainscreen bg.png")
ML = PhotoImage(file="Music_label.png")

BG_label = Label(C, image=BG, border=0)
BG_label.place(x=0, y=0)

style.configure("Vertical.TScrollbar", gripcount=0,
                background="Cyan", darkcolor="gray6", lightcolor="LightGreen",
                troughcolor="Turquoise4", bordercolor="gray6", arrowcolor="gray6",arrowsize=15)


wrapper1= LabelFrame(C, background="gray6",bd=0)
# 画布取消固定宽高,设置自适应填充
mycanvas = Canvas(wrapper1,background="gray6",borderwidth=0, highlightthickness=0)
mycanvas.pack(side=LEFT, fill=BOTH, expand=True, padx=0)


yscrollbar = ttk.Scrollbar(wrapper1, orient="vertical",command=mycanvas.yview)
yscrollbar.pack(side=RIGHT, fill="y")

mycanvas.configure(yscrollcommand=yscrollbar.set)

# 配置事件同时更新滚动区域和内部Frame宽度
def update_canvas(e):
    mycanvas.configure(scrollregion=mycanvas.bbox("all"))
    mycanvas.itemconfig(myframe_window, width=e.width)
mycanvas.bind('<Configure>', update_canvas)
myframe = Frame(mycanvas)
myframe_window = mycanvas.create_window((0,0), window=myframe, anchor="n")

# 调整wrapper1的布局参数,适配右侧黑色区域
wrapper1.pack(side=RIGHT, fill=BOTH, expand=True, padx=0, pady=75)

for i in range(50):
    Button(myframe, image=ML,bg="gray6",bd=0).pack(pady=2)


mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:27:03