Я пытался заставить работать полосу прокрутки, в моем приложении tkinter с этим предыдущим постом: Добавление полосы прокрутки к группе виджетов в Tkinter . Все работает нормально, если я раскомментирую код перед l oop, но, насколько я понимаю (ограниченно), я считаю, что он также должен работать, если я закомментирую код внутри l oop вместо этого. Насколько я понимаю, вызов 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()