首页 > 解决方案 > 在可滚动框架内居中和展开小部件

问题描述

我在这里有这段代码:

root = Tk() 
    container = Frame(root)
    canvas = Canvas(container, borderwidth = 0, highlightthickness = 0, width=500, height=500, bg = "white")
    scrollbar = Scrollbar(container, orient="vertical", command=canvas.yview)
    scrollable_frame = Frame(canvas)
    scrollable_frame.bind(
        "<Configure>",
        lambda e: canvas.configure(
            scrollregion=canvas.bbox("all")
        )
    )

    canvas.create_window((0, 0), window=scrollable_frame)

    canvas.configure(yscrollcommand=scrollbar.set)


    root.geometry("700x600")
    coordF=LabelFrame(scrollable_frame,text='c')
    coordF.pack(side = 'top')
    Label(coordF,text='q',font=('Bahnschrift SemiLight', 15)).grid(row=0,column=0)
    Label(coordF,text='d:',font=('Bahnschrift SemiLight', 15)).grid(row=1,column=0)
    v = StringVar(value=None)
    e1=Entry(coordF, textvariable=v)
    e1.grid(row=0,column=1)
    e2=Entry(coordF)
    e2.grid(row=1,column=1)
    scalF=LabelFrame(scrollable_frame,text='d')
    scalF.pack()
    e3=Button (scalF, text='f',font=('Bahnschrift SemiLight', 12),command=random, bg="grey")
    e3.pack(side='top')
    chosenFile = Label(scalF,textvariable=file_result,font=('Bahnschrift SemiLight', 10), wraplength=300)
    chosenFile.pack(side='top')
    scalOut=LabelFrame(scrollable_frame,text='hg')
    scalOut.pack()

    Label(scalOut,textvariable=xt,font=('Bahnschrift SemiLight', 12), wraplength=450).pack()
    Label(scalOut,textvariable=frr,font=('Bahnschrift SemiLight', 12), wraplength=450).pack()
    container.pack(expand=True)
    canvas.pack(side="left", fill="both")
    scrollbar.pack(side="right", fill="y")
    optF=LabelFrame(root,text="zh")
    optF.pack(side = 'top')  

    

    root.mainloop()

可滚动框架中的元素始终显示在可滚动框架的左上角。我尝试使用网格和打包使它们位于中心并展开,但没有任何移动。好吧,也许我不知道把我的代码放在哪里。无论如何,我希望小部件在可滚动框架中居中并相互扩展。这可以澄清这个想法:

标签: pythonpython-3.xtkintertkinter-canvas

解决方案


您可以使用以下方法将 的宽度扩展为scrollable_frame与画布的宽度相同canvas.itemconfig()

frame_id = canvas.create_window((0, 0), window=scrollable_frame, anchor='nw')
canvas.itemconfig(frame_id, width=canvas.winfo_reqwidth())

里面的那些框架scrollable_frame将水平居中,因为.pack(side='top')在它们上面使用。

对于垂直可滚动的框架,垂直扩展和居中是没有意义的。


推荐阅读