Tkinter滚动主框架包含其他框架

时间:2020-08-26 17:34:52

标签: tkinter canvas scrollbar frame

Windows 10 Tkinter上的Python 3.8.5

我想在一个较大的框架(主框架)中放置不同的框架(每个框架都包含文本),并允许滚动主框架以查看其中的所有框架。 因此,我将主框架放置在画布中,然后使用滚动条滚动包含主框架的画布。 但是,滚动条不起作用,使用滚动条时什么也不会发生,并且无法访问主框架中的所有框架。

我不明白的第二件事是,我使用frame.pack_propagate(False)来避免主框架内的所有框架自动调整其内容的大小,但是无论如何它们都会这样做。为什么?

感谢您的帮助!

from tkinter import *

def on_configure(event):canvas.configure(scrollregion=canvas.bbox("all"))

def accueil():

    global canvas
    
    canvas=Canvas(root)
    scrollbar=Scrollbar(root,command=canvas.yview)
    canvas.configure(yscrollcommand=scrollbar.set)
    canvas.bind("<Configure>",on_configure)
    frame=Frame(canvas,bg="orange",width=canvas.winfo_reqwidth(),height=canvas.winfo_reqheight())
    canvas.create_window((0,0),window=frame)
    
    frame_nouveaute_1=Frame(frame,bg="red",width=300,height=150)
    frame_nouveaute_1.pack_propagate(False)
    frame_nouveaute_1.place(y=0)
    l=Label(frame_nouveaute_1,text="- Nouveauté 1",font=25,bg="red").grid(row=0)
    l=Label(frame_nouveaute_1,text="   . xxxxx",font=25,bg="red").grid(row=1)
    l=Label(frame_nouveaute_1,text="   . yyyyy",font=25,bg="red").grid(row=2)
    l=Label(frame_nouveaute_1,text="   . zzzzz",font=25,bg="red").grid(row=3)
    
    frame_nouveaute_2=Frame(frame,bg="green",width=300,height=150)
    frame_nouveaute_2.pack_propagate(False)
    frame_nouveaute_2.place(y=frame_nouveaute_1.winfo_reqheight()+10)
    l=Label(frame_nouveaute_2,text="- Nouveauté 2",font=25,bg="green").grid(row=0)
    l=Label(frame_nouveaute_2,text="   . xxxxx",font=25,bg="green").grid(row=1)
    l=Label(frame_nouveaute_2,text="   . yyyyy",font=25,bg="green").grid(row=2)
    l=Label(frame_nouveaute_2,text="   . zzzzz",font=25,bg="green").grid(row=3)
    
    frame_nouveaute_3=Frame(frame,bg="blue",width=300,height=150)
    frame_nouveaute_3.pack_propagate(False)
    frame_nouveaute_3.place(y=frame_nouveaute_1.winfo_reqheight()+10+frame_nouveaute_2.winfo_reqheight()+10)
    l=Label(frame_nouveaute_3,text="- Nouveauté 3",font=25,bg="blue").grid(row=0)
    l=Label(frame_nouveaute_3,text="   . xxxxx",font=25,bg="blue").grid(row=1)
    l=Label(frame_nouveaute_3,text="   . yyyyy",font=25,bg="blue").grid(row=2)
    l=Label(frame_nouveaute_3,text="   . zzzzz",font=25,bg="blue").grid(row=3)
    
    canvas.place(y=25)
    scrollbar.pack(side="right",fill="y")

root=Tk()
root.geometry("%dx%d+%d+%d"%(500,350,10,10))

accueil()

root.mainloop()

0 个答案:

没有答案