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

Python Tkinter如何为Canvas上创建的输入组件添加滚动条

问题原因
  • 滚动逻辑绑定错配:当前代码将滚动条的控制命令绑定到了Canvas的yview方法,试图滚动Canvas视图,和你要给Text输入组件加滚动条的需求不匹配,应该绑定到Text组件的滚动方法。
  • 无效的滚动配置:给Canvas配置的yscrollcommand关联滚动条属于多余逻辑,没有实际作用。
修正后代码(实现Text输入框内部文本滚动)
from tkinter import *

root = Tk()
root.geometry('400x600')
root.resizable(0,0)

page = Canvas(root, width=400, height=600, bd=0, highlightthickness=0,scrollregion=(0,0,500,500))
# 若本地无对应图片可注释下面两行代码,不影响滚动功能测试
MyImage1 = PhotoImage(file='Study With4.png')
CanvasImage = page.create_image(0,0,image= MyImage1, anchor='nw')
entry =Text(page,height=29,width =46,wrap=WORD,bg='#F8F8F8')
scroll = Scrollbar(entry, orient=VERTICAL)
scroll.pack(side=RIGHT, fill=Y)
# 滚动条控制Text组件内容滚动
scroll.config(command=entry.yview)
# Text内容变动时同步更新滚动条状态
entry.config(yscrollcommand=scroll.set)
page.create_window(200,285, window=entry)
page.pack()
mainloop()
扩展:如果需要滚动Canvas整体内容(背景图+输入框一起滚动)

调整滚动条的父容器和绑定逻辑即可:

from tkinter import *

root = Tk()
root.geometry('450x600') # 宽度增加给滚动条留出空间
root.resizable(0,0)

# 滚动条放在Canvas右侧,父容器为root
scroll = Scrollbar(root, orient=VERTICAL)
scroll.pack(side=RIGHT, fill=Y)

page = Canvas(root, width=400, height=600, bd=0, highlightthickness=0,scrollregion=(0,0,500,1200)) # 调整scrollregion高度为实际内容高度
page.config(yscrollcommand=scroll.set)
scroll.config(command=page.yview)

MyImage1 = PhotoImage(file='Study With4.png')
CanvasImage = page.create_image(0,0,image= MyImage1, anchor='nw')
entry =Text(page,height=29,width =46,wrap=WORD,bg='#F8F8F8')

page.create_window(200,285, window=entry)
page.pack(side=LEFT, fill=BOTH, expand=YES)
mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:06:04