Tkinter 使框架可滚动,同时尽可能保持小部件扩展

时间:2021-03-26 01:02:36

标签: python user-interface tkinter

f我有一个框架,它包含其他扩展到整个框架宽度的小部件,所以如果情况允许;我可以让一个小部件占据整个框架,两个或三个小部件均分,或者如果小部件大量包装,则以最小宽度包装。 在这种情况下,当窗口小部件的数量太大而无法容纳在窗口中时,我希望框架可以滚动。

我的方法是将框架添加到画布并让画布可以水平滚动,但这会使框架始终以最小尺寸打包小部件。然后我尝试将框架配置为具有画布的宽度,但这完全关闭了滚动,我可以调整框架的大小以查看其宽度。

如何在屏幕上适合扩展的小部件时实现均匀划分而在不能时滚动的预期结果?

编辑:这是我正在尝试创建的类,当我添加小部件时,我稍后将其添加到 self.scrollable_framepack(side='left', fill='both', expand=True)

class ScrollableFrame(tkinter.Frame):
    def __init__(self, container, *args, **kwargs):
        super().__init__(container, *args, **kwargs)
        self.pack_propagate(False) 
        canvas = tkinter.Canvas(self, highlightthickness=0)
        scrollbar = tkinter.Scrollbar(self, orient="horizontal", command=canvas.xview)
        self.scrollable_frame = tkinter.Frame(canvas)

        self.scrollable_frame.bind("<Configure>", lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
        
        
        canvas_frame = canvas.create_window((0, 0), window=self.scrollable_frame, anchor="nw")
        
        #adding width=canvas.winfo_width() causes unwanted behavior of evenly   distributing widgets but scrollbar not working
        canvas.bind('<Configure>', lambda e: canvas.itemconfig(canvas_frame, height=canvas.winfo_height()))
        
        canvas.configure(xscrollcommand=scrollbar.set)
        scrollbar.pack(side="bottom", fill="x")
        canvas.pack(side="top", fill="both", expand=True)

0 个答案:

没有答案