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