[python] tkinter
Fermé
frizou11
-
12 mai 2006 à 15:27
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 14 mai 2006 à 23:59
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 14 mai 2006 à 23:59
A voir également:
- Tkinter grid_rowconfigure
- Tkinter canvas rotate - Forum Python
- Tkinter toplevel - Forum Python
- Tkinter focus_set ✓ - Forum Python
- Tkinter sqlite3 ✓ - Forum Python
- Morpion python tkinter - Forum Python
6 réponses
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 661
12 mai 2006 à 16:36
12 mai 2006 à 16:36
Voici un exemple:
Une fenêtre avec 2 canvas, utilisant .grid() (et non pas .pack()).
Il suffit:
- sur chaque widget, de spécifier sticky='NSEW' lors de son .grid()
- puis de configurer le poids (weight) de chaque ligne et colonne de ta grille.
Pour comparer, commenter les lignes columnconfigure et rowcconfigure: Les canvas ne s'agrandissent pas.
Jeu amusant:
Modifier les weight, ce qui permet d'avoir des widgets qui se partage la place disponible dans des proportions différentes.
Une fenêtre avec 2 canvas, utilisant .grid() (et non pas .pack()).
import Tkinter class myApplication: def __init__(self,root): self.root = root self.initialisation() def initialisation(self): canvas1 = Tkinter.Canvas(self.root) canvas1.config(background="red") canvas1.grid(row=0,column=0,sticky='NSEW') canvas2 = Tkinter.Canvas(self.root) canvas2.config(background="blue") canvas2.grid(row=1,column=0,sticky='NSEW') self.root.grid_columnconfigure(0,weight=1) self.root.grid_rowconfigure(0,weight=1) self.root.grid_rowconfigure(1,weight=1) def main(): root = Tkinter.Tk() root.title('My application') app = myApplication(root) root.mainloop() if __name__ == "__main__": main()
Il suffit:
- sur chaque widget, de spécifier sticky='NSEW' lors de son .grid()
- puis de configurer le poids (weight) de chaque ligne et colonne de ta grille.
Pour comparer, commenter les lignes columnconfigure et rowcconfigure: Les canvas ne s'agrandissent pas.
Jeu amusant:
Modifier les weight, ce qui permet d'avoir des widgets qui se partage la place disponible dans des proportions différentes.
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 661
12 mai 2006 à 16:16
12 mai 2006 à 16:16
les canevas garde la meme taille
Par défaut, tout conteneur (canvas, frame, group, etc.) prend les dimensions suffisantes pour ce qu'il contient.
Donc il s'adapte à ce qu'il doit contenir, et non à celui qui le contient.
Si tu utilises la méthode .pack() pour créer les widgets, je te conseille de les remplacer par .grid() qui donne beaucoup plus de souplesse.
(Attention: ne pas mélanger .pack() et .grid(), sinon plantages assurés).
Je vais donner un petit exemple.
Par défaut, tout conteneur (canvas, frame, group, etc.) prend les dimensions suffisantes pour ce qu'il contient.
Donc il s'adapte à ce qu'il doit contenir, et non à celui qui le contient.
Si tu utilises la méthode .pack() pour créer les widgets, je te conseille de les remplacer par .grid() qui donne beaucoup plus de souplesse.
(Attention: ne pas mélanger .pack() et .grid(), sinon plantages assurés).
Je vais donner un petit exemple.
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 661
12 mai 2006 à 16:17
12 mai 2006 à 16:17
PS: Les canvas sont faits pour dessiner dedans.
Si tu veux juste t'en servir pour contenir d'autres widgets (boutons, zones de texte, etc.), il vaut mieux prendre des frames.
Si tu veux juste t'en servir pour contenir d'autres widgets (boutons, zones de texte, etc.), il vaut mieux prendre des frames.
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 661
14 mai 2006 à 16:46
14 mai 2006 à 16:46
j'utilise de widgets ScrolledCanvas du module Pmw
et ici ton exemple ne marche plus...
Ah... je n'ai pas là maintenant le temps de regarder.
Il faudrait voir les différentes options du ScrolledCanvas.
et ici ton exemple ne marche plus...
Ah... je n'ai pas là maintenant le temps de regarder.
Il faudrait voir les différentes options du ScrolledCanvas.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 661
14 mai 2006 à 16:57
14 mai 2006 à 16:57
euh.. bizarre. Chez moi les deux Pmw.ScrolledCanvas se redimensionnent bien.
import Tkinter import Pmw class myApplication: def __init__(self,root): self.root = root self.initialisation() def initialisation(self): canvas1 = Pmw.ScrolledCanvas(self.root) canvas1.interior().config(background="red") canvas1.grid(row=0,column=0,sticky='NSEW') canvas2 = Pmw.ScrolledCanvas(self.root) canvas2.interior().config(background="blue") canvas2.grid(row=1,column=0,sticky='NSEW') self.root.grid_columnconfigure(0,weight=1) self.root.grid_rowconfigure(0,weight=1) self.root.grid_rowconfigure(1,weight=1) def main(): root = Tkinter.Tk() root.title('My application') app = myApplication(root) root.mainloop() if __name__ == "__main__": main()
c'est encore moi, je vois que ton exemple marche mais jette un coup d'oeil a mon code et corrige le moi stp car je suis en train d'halluciner la, je copie sur ton exemple et ca me marche pas
voila le code
voila le code
# -*- coding: cp1252 -*- import Tkinter import Pmw class Application(Frame): """Application principale""" def __init__(self, boss =None): Frame.__init__(self) self.can1 = Pmw.ScrolledCanvas(self) self.can1.configure(vscrollmode ='dynamic', hscrollmode ='dynamic') self.can1.resizescrollregion() self.canevas1 = self.can1.interior() self.canevas1.config(background="red") self.can2 = Pmw.ScrolledCanvas(self) self.can2.configure(vscrollmode ='dynamic', hscrollmode ='dynamic') self.can2.resizescrollregion() self.canevas2 = self.can2.interior() self.canevas2.config(background="blue") self.can1.grid(row=0,column=0,sticky='NSEW') self.can2.grid(row=1,column=0,sticky='NSEW') self.grid_columnconfigure(0,weight=1) self.grid_rowconfigure(0,weight=1) self.grid_rowconfigure(1,weight=1) if __name__ == '__main__': app = Application() app.mainloop()
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 661
14 mai 2006 à 20:47
14 mai 2006 à 20:47
frizou11
c'est normal:
Tu appelle Frame.__init__(self), mais tu n'a donné aucun parent.
Tout widget tkinter doit obligatoirement avoir un parent, sinon il ne s'affiche page.
En principe, le parent de bae est la fenêtre tkinter (ce qui est renvoyé par Tkinter.Tk()).
c'est normal:
Tu appelle Frame.__init__(self), mais tu n'a donné aucun parent.
Tout widget tkinter doit obligatoirement avoir un parent, sinon il ne s'affiche page.
En principe, le parent de bae est la fenêtre tkinter (ce qui est renvoyé par Tkinter.Tk()).
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 661
14 mai 2006 à 23:59
14 mai 2006 à 23:59
"sinon il ne s'affiche page."
==> "sinon il ne s'affiche pas."
==> "sinon il ne s'affiche pas."
14 mai 2006 à 11:30
ton exmple marche tres bien et c'est bien ce que j'attends mais j'ai un souci
au lieu d'utiliser deux widgets Canvas, j'utilise de widgets ScrolledCanvas du module Pmw
et ici ton exemple ne marche plus...
as-tu la solution pour avoir le meme resultat avec les widgets ScrolledCanvas ?
ou sinon je peux garder ton exemple mais il me faut rajouter les barres défilement lorsque les Canvas contiennent une image plus grande qu'eux... et je sais pas comment on fait, c'est pourquoi j'utilise ScrolledCanvas. Si tu sais comment le faire sans utiliser ScrolledCanvas...
Merci de ta réponse