Mon objectif est d'ajouter une barre de défilement verticale à un cadre contenant plusieurs étiquettes. La barre de défilement doit s'activer automatiquement dès que les étiquettes à l'intérieur du cadre dépassent la hauteur du cadre. Après avoir cherché, j'ai trouvé cette poste utile. En me basant sur cet article, je comprends que pour réaliser ce que je veux, (corrigez-moi si je me trompe, je suis un débutant), je dois créer un Frame
d'abord, puis créer un Canvas
à l'intérieur de ce cadre et coller la barre de défilement à ce cadre également. Ensuite, créez un autre cadre et placez-le à l'intérieur du canevas en tant qu'objet fenêtre. Voici ce que j'ai obtenu :
from Tkinter import *
def data():
for i in range(50):
Label(frame,text=i).grid(row=i,column=0)
Label(frame,text="my text"+str(i)).grid(row=i,column=1)
Label(frame,text="..........").grid(row=i,column=2)
def myfunction(event):
canvas.configure(scrollregion=canvas.bbox("all"),width=200,height=200)
root=Tk()
sizex = 800
sizey = 600
posx = 100
posy = 100
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))
myframe=Frame(root,relief=GROOVE,width=50,height=100,bd=1)
myframe.place(x=10,y=10)
canvas=Canvas(myframe)
frame=Frame(canvas)
myscrollbar=Scrollbar(myframe,orient="vertical",command=canvas.yview)
canvas.configure(yscrollcommand=myscrollbar.set)
myscrollbar.pack(side="right",fill="y")
canvas.pack(side="left")
canvas.create_window((0,0),window=frame,anchor='nw')
frame.bind("<Configure>",myfunction)
data()
root.mainloop()
- Est-ce que je fais bien les choses ? Existe-t-il une meilleure façon d'obtenir le résultat que ce code m'a donné ?
- Pourquoi dois-je utiliser la méthode de la grille ? (J'ai essayé la méthode place, mais aucune des étiquettes n'apparaît sur le canevas).
- Qu'y a-t-il de si spécial dans l'utilisation de
anchor='nw'
lors de la création d'une fenêtre sur le canevas ?
Merci de rester simple dans votre réponse, car je suis un débutant.