问题背景:当界面需要显示的内容较多时,需要用到滚动条Scrollbar,官方文档说Scrollbar只能与以下控件(canvas, entry, listbox, text)相结合。但是,如果我想让Scrollbar和frame相结合呢?
解决办法是:把frame放在canvas里面(比如填满整个canvas),canvas与scrollbar结合,这样滚动canvas就等于滚动frame了。
举个栗子
canvas=Canvas(root,width=200,height=180,scrollregion=(0,0,520,520)) #创建canvas
canvas.place(x = 75, y = 265) #放置canvas的位置
frame=Frame(canvas) #把frame放在canvas里
frame.place(width=180, height=180) #frame的长宽,和canvas差不多的
vbar=Scrollbar(canvas,orient=VERTICAL) #竖直滚动条
vbar.place(x = 180,width=20,height=180)
vbar.configure(command=canvas.yview)
hbar=Scrollbar(canvas,orient=HORIZONTAL)#水平滚动条
hbar.place(x =0,y=165,width=180,height=20)
hbar.configure(command=canvas.xview)
canvas.config(xscrollcommand=hbar.set,yscrollcommand=vbar.set) #设置
canvas.create_window((90,240), window=frame) #create_window
当然,如果是纯文本的滚动,可以选择scrolltext组件,它的函数和text一样,可以参考一下这个链接 https://www.jianshu.com/p/abea88607525