Tkinter barre de défilement pour l'image

Mon objectif est d'ajouter une barre de défilement verticale pour un cadre qui a plusieurs étiquettes en elle. La barre de défilement doit automatiquement activé dès que les étiquettes à l'intérieur du cadre dépasser la hauteur de l'image. Après recherche j'ai trouvé cette utile de poste. Basé sur ce post, je comprends que, pour atteindre ce que je veux, (corrigez-moi si je me trompe, je suis un débutant) j'ai créer un Frame d'abord, puis de créer un Canvas à l'intérieur de ce cadre et le bâton de la barre de défilement de l'image ainsi. Après cela, créez un autre cadre et de le mettre à l'intérieur de la toile comme un objet de la fenêtre. Donc, je suis finalement arrivé à ceci:

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()
  1. Suis-je en train de faire? Est-il mieux/plus intelligente de manière à atteindre la sortie de ce code m'a donné?
  2. Pourquoi dois-je utiliser la grille de la méthode? (J'ai essayé la méthode place, mais aucune des étiquettes apparaissent sur la toile.)
  3. Quoi de si spécial à propos de l'utilisation anchor='nw' lors de la création de la fenêtre sur la toile?

Veuillez garder votre réponse simple, car je suis un débutant.

  • Vous avez à l'envers dans votre question, si le code est correct à première vue. Vous devez créer un cadre, l'incorporer dans le canevas, puis fixez la barre de défilement sur la toile.
  • double possible de l'Ajout d'une barre de défilement à une grille de widgets de Tkinter
  • Il y a beaucoup de choses c'est un doublon potentiel, mais j'ai voté pour fermer cette comme un doublon d'un autre qui semble avoir les meilleures réponses: stackoverflow.com/questions/1873575/...
  • Je suis très en retard, mais merci beaucoup pour cette! C'était le seul entièrement fonctionnel (et complète) exemple de création d'un cadre défilant à l'aide seulement de la pure Tkinter (une restriction pour mon projet). Je sais que ce n'était pas votre intention, mais je vous remercie!
InformationsquelleAutor Chris Aung | 2013-04-24