首页 > 解决方案 > Tkinter 滚动条对我的画布大小没有反应

问题描述

我正在尝试实现一个滚动条,它将滚动浏览画布窗口中的一个框架。据我所知,画布、框架和框架元素都运行良好。我在框架中添加或删除元素没有任何问题,它们会按我的意愿显示。唯一的问题是滚动条。

滚动条根本不起作用。它准确地显示在它应该出现的位置,但它根本不会对画布或框架元素做出反应。如果我调整窗口大小并压下画布,滚动条什么也不做——它只是保持空白,就好像它没有任何东西可以滚动一样。

我承认还有一百万个关于画布中滚动条的其他问题,但我已经尽可能多地仔细阅读了这些问题,但没有找到任何解决我问题的方法。因此,我问:知道我哪里出错了吗?

任何有关可能修复的反馈或建议将不胜感激。

lbl_frame = Canvas(menu, bg=root_bg, width=(menu.winfo_width() - 35), height=canvas_size, highlightthickness=0)
f = Frame(lbl_frame, bg=root_bg) # Frame that goes in the canvas

scroll = Scrollbar(menu, bg=root_bg, orient='vertical', width=17) # Scrollbar
scroll.grid(row=3, column=2, sticky='ns')
scroll.config(command=lbl_frame.yview) # Scrollbar's command reads information about the height of the canvas

lbl_frame.create_window(0, 0, window=f, anchor="nw") # Creating a canvas window for the frame
lbl_frame.config(yscrollcommand=scroll.set)
    
def canvas_resize(event):
    global min_size # Currently set to 95
        
    canvas_size = menu.winfo_height() - 170 # Sum of all other elements
        
    if canvas_size < min_size:
        canvas_size = min_size # Canvas size must be >= 100
        
    lbl_frame.configure(height=canvas_size) # Scale canvas size with window
    lbl_frame.configure(scrollregion=lbl_frame.bbox("all"))
    # Set scrollregion to the total region of all elements in the frame
    
menu.bind("<Configure>", lambda e: canvas_resize(e))

请注意,元素会在此之后不久添加到框架中。因为我添加它们的过程很长,并且包含很多与我的问题无关的东西,而且我在添加这些元素时没有任何问题,所以我决定不包括那部分。

标签: pythontkintercanvasscrollbar

解决方案


我想到了。这与我添加元素的方式有关。我将它们添加到画布上,而不是框架上。所以框架是空的。


推荐阅读