【问题标题】:Tkinter scrollbar isn't reacting to the size of my canvasTkinter 滚动条对我的画布大小没有反应
【发布时间】:2021-06-30 07:59:16
【问题描述】:

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

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

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

非常感谢任何有关可能修复的反馈或建议。

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))

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

【问题讨论】:

  • 我很确定有一个问题涉及使用滚动条和画布
  • @Matiiss 我检查了示例代码,据我所知,我已经完成了那里所做的一切。如果您知道任何其他帖子,请随时链接它们。那个我还没有看过,所以看看还是不错的!
  • stackoverflow.com/questions/3085696/… 这是另一个可能有帮助的问题
  • 搞清楚了。感谢您的帮助:)

标签: python tkinter canvas scrollbar


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-06-04
    • 1970-01-01
    • 2021-04-27
    • 2014-03-29
    • 1970-01-01
    • 2017-07-03
    • 2012-05-09
    • 2017-09-29
    • 1970-01-01
    相关资源
    最近更新 更多