#1 Le 04/02/2008, à 20:25
- Linkid
[Python] Canvas + ScrollBar + Tkinter
Bonjour,
Je suis actuellement en train de faire une petite application en python en utilisant Tkinter. Je viens de créer un Canvas can1.
Le problème est que ce qu'il y a à l'intérieur du canvas est très voire trop grand pour que tout soit affiché à l'écran... C'est pourquoi j'ai pensé à mettre des scrollbars pour le canvas. J'ai fait quelques recherches et j'ai découvert qu'il y a un module dans Pmw.
Puis plus tard, j'ai découvert qu'on peut faire sans... voici le bout de code trouvé sur un forum http://www.commentcamarche.net/forum/af … r-et-class :
from Tkinter import *
class AutoScrollbar(Scrollbar):
def set(self, lo, hi):
if float(lo) <= 0.0 and float(hi) >= 1.0:
# grid_remove is currently missing from Tkinter!
self.tk.call("grid", "remove", self)
else:
self.grid()
Scrollbar.set(self, lo, hi)
def pack(self, **kw):
raise TclError, "cannot use pack with this widget"
def place(self, **kw):
raise TclError, "cannot use place with this widget"
root = Tk()
root.title('Mon application')
vscroll = AutoScrollbar(root)
hscroll = AutoScrollbar(root, orient=HORIZONTAL)
can1 = Canvas(root, bg="white", xscrollcommand=hscroll.set, yscrollcommand=vscroll.set)
can1.grid(row=1, column=0, sticky=N+S+E+W)
can1.create_rectangle(10, 10, 3*20, 3*20, fill="yellow")
can1.create_rectangle(100, 100, 30*20, 3*2000, fill="yellow")
vscroll.config(command=can1.yview)
hscroll.config(command=can1.xview)
vscroll.grid(row=1, column=1, sticky=N+S)
hscroll.grid(row=2, column=0, sticky=E+W)
can1.config(scrollregion=can1.bbox("all"))
root.mainloop()
Le truc, c'est que j'aimerais bien remplacer les grid par des pack car dans mon appli, je n'utilise que des pack... Donc pour cela, j'aurais besoin d'aide... J'avais bien pensé à enlever les deux dernières def de ma class et remplacer tous les grid par des pack, mais les scrollbar se retrouvent en dehors du canvas... donc problème !
Merci d'avance !
Linkid
Ubuntu 9.10 : "The Karmic Koala"... Un monde de rêve rempli d'animaux !
Notre liberté ne se limite pas à Windows...
Hors ligne