bonjour,
comment associer une Scrollbar à un Frame (par exemple), pour réaliser une sorte de tableur à base de case de type Entry disposées ?
merci d'avance.
bonjour,
comment associer une Scrollbar à un Frame (par exemple), pour réaliser une sorte de tableur à base de case de type Entry disposées ?
merci d'avance.
Une manière simple (mais pas forcement satisfaisante) est d'avoir recours à une tierce bibliothèque, genre Tix, et d'utiliser les modules tout fait (TixScrolledText) qui même s'ils ne correspondent pas exactement à ton besoin (mais peut être que pour d'autres ça sera le cas) feront l'affaire.
Sinon, il faut céer un canevas, une frame dedans, et non seulement créer ta scroll bar
mais aussi l'associer à ton canevas (sur tu créer par la même occasion)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 self.scroll=Scrollbar(self.root,orient=VERTICAL) #ou HORIZONTAL self.scroll.grid(row=0,column=1,sticky=N+S)
et initialiser l'ascenseur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 self.can=Canvas(self.root,yscrollcommand=self.scroll.set) # ou xscrollcommand=self.scroll.set ou les 2 #puis self.scroll.config(command=self.liste.yview) #ou xview
En plus, si ta fenêtre est redimensionable, un petit coup de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 canvas.xview_moveto(0) # ou canvas.yview_moveto(0)
grid_columnconfigure() et grid_rowconfigure() seront nécessaire.
Voilà, j'ai peut être oublié des morceaux mais ça doit te mettre sur la voie
ça m'a l'air viable. et je préfère encore tenter de passer par cette voie que de refaire toute cette partie de mon programme et son interfaçage avec ma base de donnée. mon script est devenu trop bordélique et trop dégueulasse, et je n'ai pas assez de courage pour reprendre.
par contre, je pense que je devrait appliquer assez facilement ce genre de bidouillage.
merci ! (je teste cet après midi ou demain)
euh ben en fait, ça marche pas top. je créé bien un Canvas et un Scrollbar, je les associe bien l'un à l'autre, mais quand je dispose quelque chose sur mon Canvas, qui a une taille supérieure à celui-ci, la scrollbar reste désactivée (grisée).
il n'y aurais pas un petit exemple complet qui marche ?
parce qu'en fait, j'essaie d'utiliser le moins de bibliothèques possibles. étant donné que je devrait faire une distribution en créant un exécutable avec py2exe,moins j'aurais de module à charger pour le bon fonctionnement de mon programme, moins de chance j'aurais de m'arracher les cheveux sur la "pseudo-compilation".
T'arrache pas les cheveux, ils tomberont d'eux même bien assez tôt...
Je regarde ça après manger...
Effectivement.
Moi j'avais fait ça directement avec une zone texte dans le passé.
Si je mets une zone texte dans le canevas et que c'est le canevas qui contrôle la scroll bar, ça ne marche pas.
Question : pourquoi?
démonstration d'un truc qui marche:
Là quand la zone de texte grandit elle agit sur les scroll (et réciproquement)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 self.scroll=Tkinter.Scrollbar(self,orient=Tkinter.VERTICAL) self.scroll.grid(row=0,column=3,sticky=Tkinter.N+Tkinter.S) self.texte=Tkinter.Text(self,width=60,height=10) self.texte.config(yscrollcommand=self.scroll.set) self.texte.grid(row=0,column=0) self.scroll.config(command=self.texte.yview)
Mais pourquoi quand la zone texte est inclue dans un canevas ça ne marche pas? Est-ce que le canevas ne grandit pas? à investiguer.
2ème cas, si tu à ton texte dans ton caneva et que tu lis la scroll barre au 2, ça marche aussi.
par contre c'est pas beau,ne fait pas ça :
edit : piste à explorer : self.can.config(scrollregion=(left, top, right, bottom))
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 self.scroll=Tkinter.Scrollbar(self,orient=Tkinter.VERTICAL) self.scroll.grid(row=0,column=3,sticky=Tkinter.N+Tkinter.S) self.can=Tkinter.Canvas(self,yscrollcommand=self.scroll.set) self.can.grid(row=0,column=0,columnspan=3) self.texte=Tkinter.Text(self.can,width=60,height=10) self.texte.config(yscrollcommand=self.scroll.set) self.texte.grid(row=0,column=0) self.scroll.config(command=self.can.yview) self.scroll.config(command=self.texte.yview)
Partager