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

Tkinter画布内嵌滚动Frame未居顶且可向上滚动问题排查

Tkinter Canvas嵌入Frame居顶异常问题排查求助

我开发一款GUI工具时遇到了棘手问题:将可滚动Frame嵌入Canvas后,Frame并未处于Canvas顶部(期望是居顶显示),且Canvas还能向上滚动到Frame上方的空白区域(Frame背景为绿色,Canvas背景为黄色),这属于异常行为。我反复检查修改代码都没能解决,求各位提供排查思路,感谢!

代码如下:

import tkinter.ttk as ttk
from tkinter import *
    
root = Tk()
root.title("Checklist Buddy")
root.config(padx=10, pady=5)
root.geometry("800x500")

top_frame = Frame(root, bg="black")
top_frame.grid(row=0, column=0, sticky="NSEW")

mf = Frame(root, bg="brown")
mf.grid(row=1, column=0, sticky="NEWS")

canvas = Canvas(mf, bg="yellow")
canvas.grid(row=0, column=0, sticky="NEWS")

yscrollbar = ttk.Scrollbar(mf, command=canvas.yview)
yscrollbar.grid(row=0, column=1, sticky="ns")

canvas.bind('<Configure>', lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
canvas.configure(yscrollcommand=yscrollbar.set)

bpo_frame = Frame(canvas, background="green")
win = canvas.create_window((0, 0), window=bpo_frame, height=100)


def _on_mousewheel(event):
    canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")


def onCanvasConfigure(event):
    canvas.itemconfigure(win, width=event.width)


canvas.bind('<Configure>', onCanvasConfigure, add="+")
canvas.bind_all("<MouseWheel>", _on_mousewheel)

root.columnconfigure("all", weight=1)
root.rowconfigure("all", weight=1)

mf.columnconfigure(0, weight=1)
# mf.rowconfigure("all", weight=1)

root.mainloop()

问题示意图:

问题示意图:绿色Frame未居顶,上方存在黄色Canvas空白区域,且可向上滚动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:55:27