为什么滚动条在 canvas (tkinter) 中不起作用?
Why is the scrollbar not working in the canvas (tkinter)?
我想要 window 框架展开整个 canvas 并且有一个滚动条。现在滚动条在视觉上存在,但不能用作滚动条。
root = Tk()
def onCanvasConfigure(e):
my_canvas.configure(scrollregion = my_canvas.bbox("all")) #make the scrollfunction work
my_canvas.itemconfig('window', height=(my_canvas.winfo_height()-100), width=(my_canvas.winfo_width()-100)) #set the frame window to canvas size
#Below code to add scrollbar to app.
# Layers (root -> main_frame -> my_canvas -> window (frame))
# Create A Main Frame
main_frame = Frame(root)
main_frame.pack(fill=BOTH, expand=1)
# Create A Canvas
my_canvas = Canvas(main_frame)
my_canvas.pack(side=LEFT, fill=BOTH, expand=1)
# Add A Scrollbar To The Canvas
my_scrollbar = ttk.Scrollbar(main_frame, orient=VERTICAL, command=my_canvas.yview)
my_scrollbar.pack(side=RIGHT, fill=Y)
# Configure The Canvas
my_canvas.configure(yscrollcommand=my_scrollbar.set)
# Create ANOTHER Frame INSIDE the Canvas
window = Frame(my_canvas)
# Add that New frame To a Window In The Canvas
my_canvas.create_window((0,0), window=window, anchor="nw", tags="window")
my_canvas.bind("<Configure>", onCanvasConfigure)
由于您将内部框架 window
的大小调整为与 canvas 相同的大小,因此 scrollregion
将与 canvas 的大小大致相同使滚动条不激活。
如果您设置的框架高度大于canvas,滚动条将被激活:
def onCanvasConfigure(e):
# resize the frame with double height of canvas
my_canvas.itemconfig('window', height=e.height*2, width=e.width)
# update scrollregion
my_canvas.configure(scrollregion=my_canvas.bbox("all"))
我想要 window 框架展开整个 canvas 并且有一个滚动条。现在滚动条在视觉上存在,但不能用作滚动条。
root = Tk()
def onCanvasConfigure(e):
my_canvas.configure(scrollregion = my_canvas.bbox("all")) #make the scrollfunction work
my_canvas.itemconfig('window', height=(my_canvas.winfo_height()-100), width=(my_canvas.winfo_width()-100)) #set the frame window to canvas size
#Below code to add scrollbar to app.
# Layers (root -> main_frame -> my_canvas -> window (frame))
# Create A Main Frame
main_frame = Frame(root)
main_frame.pack(fill=BOTH, expand=1)
# Create A Canvas
my_canvas = Canvas(main_frame)
my_canvas.pack(side=LEFT, fill=BOTH, expand=1)
# Add A Scrollbar To The Canvas
my_scrollbar = ttk.Scrollbar(main_frame, orient=VERTICAL, command=my_canvas.yview)
my_scrollbar.pack(side=RIGHT, fill=Y)
# Configure The Canvas
my_canvas.configure(yscrollcommand=my_scrollbar.set)
# Create ANOTHER Frame INSIDE the Canvas
window = Frame(my_canvas)
# Add that New frame To a Window In The Canvas
my_canvas.create_window((0,0), window=window, anchor="nw", tags="window")
my_canvas.bind("<Configure>", onCanvasConfigure)
由于您将内部框架 window
的大小调整为与 canvas 相同的大小,因此 scrollregion
将与 canvas 的大小大致相同使滚动条不激活。
如果您设置的框架高度大于canvas,滚动条将被激活:
def onCanvasConfigure(e):
# resize the frame with double height of canvas
my_canvas.itemconfig('window', height=e.height*2, width=e.width)
# update scrollregion
my_canvas.configure(scrollregion=my_canvas.bbox("all"))