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

如何在CustomTkinter中为Frame而非TextBox创建滚动条

在CustomTkinter中为Frame添加滚动条

如果你不想给CTkTextBox绑定滚动条,而是要让普通CTkFrame具备滚动功能,有两种实用方案:

方法1:直接用官方封装的CTkScrollableFrame

这是最省心的方式,CustomTkinter已经内置了可滚动Frame组件,直接实例化就能用:

import customtkinter as ctk

app = ctk.CTk()
app.geometry("400x300")

# 创建可滚动Frame
scrollable_frame = ctk.CTkScrollableFrame(app, width=380, height=280)
scrollable_frame.pack(pady=10, padx=10, fill="both", expand=True)

# 往里面添加测试组件
for i in range(20):
    label = ctk.CTkLabel(scrollable_frame, text=f"标签 {i+1}")
    label.pack(pady=5, padx=5)

app.mainloop()

方法2:手动绑定Scrollbar与Frame(自定义程度更高)

如果需要更灵活的滚动控制,可以用Canvas包裹目标Frame,再关联滚动条实现:

import customtkinter as ctk

app = ctk.CTk()
app.geometry("400x300")

# 创建主容器
main_container = ctk.CTkFrame(app)
main_container.pack(pady=10, padx=10, fill="both", expand=True)

# 创建Canvas和垂直滚动条
canvas = ctk.CTkCanvas(main_container)
scrollbar = ctk.CTkScrollbar(main_container, orientation="vertical", command=canvas.yview)
# 需要滚动的目标Frame
target_frame = ctk.CTkFrame(canvas)

# 配置Canvas滚动区域:当Frame内容变化时自动更新可滚动范围
target_frame.bind(
    "<Configure>",
    lambda e: canvas.configure(scrollregion=canvas.bbox("all"))
)

# 将Frame嵌入Canvas
canvas.create_window((0, 0), window=target_frame, anchor="nw")
# 关联滚动条与Canvas的滚动动作
canvas.configure(yscrollcommand=scrollbar.set)

# 布局Canvas和滚动条
canvas.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")

# 添加测试组件
for i in range(20):
    label = ctk.CTkLabel(target_frame, text=f"自定义滚动Frame - 标签 {i+1}")
    label.pack(pady=5, padx=5)

# 绑定鼠标滚轮事件(可选,提升交互体验)
def handle_mouse_wheel(event):
    canvas.yview_scroll(int(-1*(event.delta/120)), "units")

canvas.bind_all("<MouseWheel>", handle_mouse_wheel)

app.mainloop()

关键说明

  • 手动实现时,Canvas作为中间层处理滚动逻辑,因为原生Frame没有滚动指令接口
  • <Configure>事件绑定是为了在Frame内容增减时,自动调整Canvas的可滚动范围
  • 鼠标滚轮绑定能让用户通过滚轮直接控制滚动,操作更顺手

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:05:07