tkinter: à l'aide des barres de défilement sur une toile
Je suis en train de faire une toile de défilement. Cependant, une fois que j'ai essayer de mettre en place les barres de défilement pour travailler avec la toile, tkinter, semble totalement ignorer les dimensions j'ai d'abord fixé pour mon toile. J'ai essayé de mettre le tout dans un cadre, la définition de la toile pour remplir le cadre, puis le réglage de la taille de l'image, mais qui présente le même problème, sauf si j'ai mis l'image pour remplir la fenêtre, ce qui n'est pas ce que je veux. Fondamentalement, je veux une taille fixe en toile avec des barres de défilement sur elle. Mon code ressemble à ceci (en python 3.1):
from tkinter import *
root=Tk()
frame=Frame(root,width=300,height=300)
frame.grid(row=0,column=0)
canvas=Canvas(frame,bg='#FFFFFF',width=300,height=300,scrollregion=(0,0,500,500))
hbar=Scrollbar(canvas,orient=HORIZONTAL)
hbar.pack(side=BOTTOM,fill=X)
hbar.config(command=canvas.xview)
vbar=Scrollbar(canvas,orient=VERTICAL)
vbar.pack(side=RIGHT,fill=Y)
vbar.config(command=canvas.yview)
canvas.config(width=300,height=300)
canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set)
canvas.pack(side=LEFT,expand=True,fill=BOTH)
root.mainloop()
InformationsquelleAutor Robert Mastragostino | 2011-10-11
Vous devez vous connecter pour publier un commentaire.
Vos barres de défilement besoin d'avoir l'Image en tant que parent, et non la Toile:
La raison pour laquelle cela fonctionne est dû à la façon dont
pack
œuvres. Par défaut, il va tenter de réduire (ou augmenter) un conteneur de correspondre exactement à ses enfants. Parce que les barres de défilement sont les enfants de la toile dans l'exemple original, la toile se rétrécit pour s'adapter.Si vous voulez les barres de défilement apparaissent à l'intérieur de la toile, l'astuce est d'utiliser une trame supplémentaire. Place de la toile et les barres de défilement dans ce cadre intérieur, tourner les frontières hors de la toile et sur le cadre. Définir l'arrière-plan de l'image pour être la même que la toile et il apparaît que les barres de défilement sont à l'intérieur de la toile.
scrollregion=(0,0,500,500)
, sans elle, l'ensemble ne peut pas marcher!!.config
lorsque vous avez déjà mis en lorsque vous avez créé aveccanvas=Canvas(...)
?