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

