繁体   English   中英

Python tkinter:画布滚动条出现但不起作用

[英]Python tkinter: Canvas scrollbar appears but doesn't work

我一直在尝试向包含单个框架的画布添加滚动条,该框架容纳着小部件。 我添加了滚动条,该滚动条可以正确显示,但对画布没有影响。

area2=Frame(border2,bg="#FAFAFA")
area2.pack(side="top",fill=BOTH,expand=True)

scrollbar=Scrollbar(area2)
scrollbar.pack(side='right',fill=Y)

scrollcanvas=Canvas(area2,height=1500,yscrollcommand=scrollbar.set)
scrollcanvas.pack(side='left',fill=BOTH,expand=True)

scrollcanvasframe=Frame(scrollcanvas)
scrollcanvasframe.pack(side='top',fill=BOTH,expand=False)

v2=IntVar()
Label(scrollcanvasframe,textvariable=v2,bg="#FAFAFA").pack(side="top")

canvas2=Canvas(scrollcanvasframe,width=800,height=566,bg='white')
canvas2.pack(side="top")
canvas3=Canvas(scrollcanvasframe,width=800,height=566,bg='grey')
canvas3.pack(side="top")

scrollbar.config(command=scrollcanvas.yview)
scrollcanvas.config(yscrollcommand=scrollbar.set,scrollregion=(0,0,1000,1500))

我认为该问题可能与滚动区域有关,该区域在最后添加,因为画布会扩展以适合其放置的框架。

我也尝试过在这里查看各种帖子,但似乎无济于事。

您试图将包含其他各种小部件的框架嵌入到画布中,以便可以滚动。 但是,在创建scrollcanvasframe之后,将scrollcanvasframe打包,是不正确的。 画布本身就是一个几何管理器,使画布管理另一个小部件的正确方法是使用create_window

在这种情况下,请删除scrollcanvasframe.pack调用并按如下所示进行替换:

#scrollcanvasframe.pack(side='top',fill=BOTH,expand=False)
scrollcanvas.create_window((5, 5), window=scrollcanvasframe, anchor=NW)

这将在画布上的位置5,5处为框架小部件创建一个占位符,并将锚点设置为对象的左上方(默认情况下为中心)。 现在,小部件正在由画布管理,并将与其他任何元素一起滚动。 您可以通过在上面添加矩形或直线并进行滚动查看来进行测试。

打包到scrollcanvasframe中的其他小部件都很好。 它们由框架管理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM