【发布时间】:2020-04-27 03:01:24
【问题描述】:
我正在尝试编写可用于查看画布内容的滚动条。因此,在许多错误之后,我让滚动条停留在它滚动到的位置,但即使我向下滚动,它也会继续在窗口的最顶部显示内容,并且我看到了许多关于滚动条如何工作的类似问题和文章在画布上,但对我没有任何作用。
我也尝试使用 bbox("all") 来设置画布的滚动区域,但这也不起作用。使用框架也不起作用。在一些类似的问题上,我看到放置应该以特定的方式进行,但我不知道如何做到这一点,或者即使我的代码因此而无法工作。我制作了画布中给出的小部件。我看到在很多地方都使用 canvas.create_window 命令完成了相同的操作,但我不太明白如何使用它,没有它它也能正常工作,所以我没有打扰。
我在画布中使用了标签、条目、单选按钮、选项菜单和按钮。这是我使用 bbox("all") 的方法,它对我也不起作用,最终禁用了滚动条。我已经尽可能短了。
from tkinter import *
w = Tk()
w.geometry('650x640')
state=StringVar()
c=Canvas(w,bg="gray94",height=750,width=650)
c.config(scrollregion=c.bbox("all"))
c.pack(expand=YES,fill=BOTH)
scr=Scrollbar(c)
scr.pack(side=RIGHT,fill=Y)
c.config(yscrollcommand=scr.set)
scr.config(command=c.yview)
#widgets
Button(c, text="Back").place(x=100,y=200)
Label(c, text="Registration form",width=20,font=("bold",
20)).place(x=160,y=750)
Label(c, text="State",width=20,font=("bold", 10)).place(x=149,y=390)
l2 = ['KA','NY']
dl2=OptionMenu(w,state, *l2)
dl2.place(x=310,y=390)
Button(c, text='Submit',width=20).place(x=240,y=690)
w.mainloop()
这就是我执行时的样子。
如果我使用滚动区域的坐标,我可以如图所示向下滚动,但我仍然看不到 y=750 处的标签
我正在使用 python 3.6.8。这是我的第一个问题,对于任何错误,我深表歉意,如果缺少任何信息,请告诉我,或者我应该用我的完整代码更新问题。 谢谢你:)
【问题讨论】:
-
在您要创建滚动条小部件时设置滚动条方向和命令。写
scr = Scrollbar(c,orient = "vertical",command = c.yview)。 -
您需要配置滚动区域,通常使用
bbox("all")。如果您说它不起作用,请通过创建 minimal reproducible example 来展示您的尝试,该minimal reproducible example 还显示了您正在添加到画布的事物类型以及如何添加它们的示例。 -
@BryanOakley 使用 bbox("all") 实际上只是禁用了滚动条。我也更新了我的问题,希望这是您的要求。
标签: python-3.x tkinter scrollbar tkinter-canvas