【发布时间】:2020-03-09 03:03:44
【问题描述】:
我试图让滚动条在我的 tkinter 应用程序中使用之前的帖子:Adding a scrollbar to a group of widgets in Tkinter。
如果我在 for 循环之前取消注释代码,一切都会正常工作,但据我(有限的)理解,我相信如果我取消注释 for 循环内的代码,它也应该工作。
据我了解,调用canvas.configure(scrollregion=canvas.bbox("all")) 应该更新画布的滚动区域以包含放置在框架内的所有标签小部件。第一个只是在每次使用frame.bind("<Configure>",onFrameConfigure) 将新标签小部件添加到框架时自动执行,而第二个手动执行,那么有什么区别?为什么它不起作用?
import tkinter
root = tkinter.Tk()
canvas = tkinter.Canvas(root)
frame = tkinter.Frame(canvas)
scrollbar=tkinter.Scrollbar(root,orient="vertical",command=canvas.yview)
canvas.configure(yscrollcommand=scrollbar.set)
scrollbar.pack(side="right", fill="y")
canvas.pack(fill="both", expand=True)
canvas.create_window((0, 0), window=frame, anchor="nw")
# works
#def onFrameConfigure(event):
# canvas.configure(scrollregion=canvas.bbox("all"))
#
#frame.bind("<Configure>", onFrameConfigure)
for x in range(100):
new_label = tkinter.Label(frame, text="%d"%x)
new_label.pack()
# doesn't work
#canvas.configure(scrollregion=canvas.bbox("all"))
root.mainloop()
【问题讨论】: