⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ controles standards ⇨ Canvas
tkinter.Canvas ( ).scale ( )
⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ controles standards ⇨ Canvas
tkinter.Canvas ( ).scale ( )
DESCRIPTION.
Calcule de nouvelles coordonnées pour les sommets d'un, ou des éléments d'une zone de dessin, en appliquant un coefficient multiplicateur aux distances les séparant d'un points de références.
SYNTAXE.
CAN_Toile.scale ( element , abscisse , ordonnee , facteurX , facteurY )
CAN_Toile ⇨ instance quelconque de tkinter.Canvas ( ) [ OBLIGATOIRE ]
.scale ( ) ⇨ appel de la méthode [ OBLIGATOIRE ]
element ⇨ élément à modifier [ OBLIGATOIRE ]
abscisse ⇨ abscisse du point de référence [ OBLIGATOIRE ]
ordonnee ⇨ ordonnée du point de référence [ OBLIGATOIRE ]
facteurX ⇨ ratio multiplicateur des abscisses [ OBLIGATOIRE ]
facteurY ⇨ ratio multiplicateur des ordonnées [ OBLIGATOIRE ]
REMARQUES.
element peut être un ou des int ( ) représentant des identifiants numériques, un str ( ) indiquant le tag d'un groupe d'éléments ou la variable l'élément de la zone de dessin.
abscisse est un int ( ) indiquant la distance, en pixels, entre le point de référence et le bord gauche de la zone de dessin.
ordonnee est un int ( ) indiquant la distance, en pixels, entre le point de référence et le bord haut de la zone de dessin.
facteurX est un float ( ) fixant le coefficient à appliquer à la distance entre abscisse et les abscisses (index paire) de chaque sommet de element.
facteurY est un float ( ) fixant le coefficient à appliquer à la distance entre ordonnee et les ordonnées (index impaire) de chaque sommet de element.
La valeur de facteurX et facteurY doit toujours être positive et différente de 0 (zéro). Si la valeur de facteurX et facteurY est :
- inférieur à 1, la distance entre le point de référence et les sommets est réduite.
- égal à 1, la distance entre le point de référence et les sommets restent inchangée ;
- supérieur à 1, la distance entre le point de référence et les sommets est agrandie.
La méthode tkinter.Canvas ( ).scale ( ) ne modifie pas la taille de element, mais la distance entre le point de référence aux coordonnées ( abscisse , ordonnee ) et les sommets délimitant element. Ainsi tkinter.Canvas ( ).scale ( )
- calcule la distance entre abscisse et chaque abscisses (index paire) des sommets de element ;
- ensuite cette distance est multipliée par facteurX, et ;
- enfin ce résultat remplace la valeur de l'index du sommet concerné. Et de même la méthode ;
- calcule la distance entre ordonnee et chaque ordonnées (index impaire) des sommets de element ;
- ensuite cette distance est multipliée par facteurY, et ;
- enfin ce résultat remplace la valeur de l'index du sommet concerné ;
- element sera donc redéfini avec de nouvelles coordonnées pour chacun de ses sommets.
La méthode tkinter.Canvas ( ).scale ( ) s'apparente donc plus à un effet zoom qu'à un effet loupe.
EXEMPLE.
import tkinter
def FNC_Echelle ( ) :
CAN_Toile.scale ( 1 , SCA_Abscisse.get ( ) , SCA_Ordonnee.get ( ) , SCA_Facteur_X.get ( ) , SCA_Facteur_Y.get ( ) )
def FNC_Pivot ( ) :
CAN_Toile.coords ( 3 , SCA_Abscisse.get ( ) , SCA_Ordonnee.get ( ) - 5 , SCA_Abscisse.get ( ) , SCA_Ordonnee.get ( ) + 5 )
CAN_Toile.coords ( 4 , SCA_Abscisse.get ( ) - 5 , SCA_Ordonnee.get ( ) , SCA_Abscisse.get ( ) + 5 , SCA_Ordonnee.get ( ) )
CAN_Toile.coords ( 2 , *CAN_Toile.coords ( 1 ) )
CAN_Toile.scale ( 2 , SCA_Abscisse.get ( ) , SCA_Ordonnee.get ( ) , SCA_Facteur_X.get ( ) , SCA_Facteur_Y.get ( ) )
LAB_Avant [ "text" ] = f" Avant : coords { CAN_Toile.coords ( 1 ) }"
LAB_Apres [ "text" ] = f" Après : coords { CAN_Toile.coords ( 2 ) }"
TKI_Principal.after ( 50 , FNC_Pivot )
def FNC_Raz ( ) :
LAB_Avant [ "text" ] = f" Avant : coords { CAN_Toile.coords ( 1 ) }"
LAB_Apres [ "text" ] = ""
CAN_Toile.coords ( 1 , 190 , 190 , 210 , 210 )
CAN_Toile.coords ( 2 , 0 , 0 , 0 , 0 )
SCA_Abscisse.set ( 200 )
SCA_Ordonnee.set ( 200 )
SCA_Facteur_X.set ( 1 )
SCA_Facteur_Y.set ( 1 )
TKI_Principal = tkinter.Tk ( )
BUT_Quitter = tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy )
BUT_RaZ = tkinter.Button ( TKI_Principal , text = "R.A.Z." , command = FNC_Raz )
BUT_Action = tkinter.Button ( TKI_Principal , text = "Exécuter" , command = FNC_Echelle )
SCA_Abscisse = tkinter.Scale ( TKI_Principal , orient = "horizontal" , to = 400 , length = 250 )
SCA_Ordonnee = tkinter.Scale ( TKI_Principal , orient = "horizontal" , to = 400 , length = 250 )
SCA_Facteur_X = tkinter.Scale ( TKI_Principal , orient = "horizontal" , from_ = .1 , to = 4 , resolution = .1 , length = 250 )
SCA_Facteur_Y = tkinter.Scale ( TKI_Principal , orient = "horizontal" , from_ = .1 , to = 4 , resolution = .1 , length = 250 )
LAB_Avant = tkinter.Label ( TKI_Principal , justify = "left" , anchor = "w" , relief = "sunken" , bd = 2 , height = 2 )
LAB_Apres = tkinter.Label ( TKI_Principal , justify = "left" , anchor = "w" , relief = "sunken" , bd = 2 , height = 2 )
CAN_Toile = tkinter.Canvas ( TKI_Principal , bg = "white" , width = 400 , height = 400 )
CAN_Toile.create_oval ( 190 , 190 , 210 , 210 , fill = "palegreen" , width = 2 )
CAN_Toile.create_oval ( 0 , 0 , 0 , 0 , fill = "" , dash = ( 5 ) , width = 2 )
CAN_Toile.create_line ( 200 , 195 , 200 , 205 , fill = "red" )
CAN_Toile.create_line ( 195 , 200 , 205 , 200 , fill = "red" )
CAN_Toile.grid ( row = 0 , column = 0 , columnspan = 3 , sticky = "nesw" )
LAB_Avant.grid ( row = 1 , column = 0 , columnspan = 3 , sticky = "nesw" )
LAB_Apres.grid ( row = 2 , column = 0 , columnspan = 3 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "Abscisse :" , justify = "right" , anchor = "se" ).grid ( row = 3 , column = 0 , sticky = "se" )
SCA_Abscisse.grid ( row = 3 , column = 1 , sticky = "w" )
BUT_Action.grid ( row = 3 , column = 2 , rowspan = 2 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "Ordonnee :" , justify = "right" , anchor = "se" ).grid ( row = 4 , column = 0 , sticky = "se" )
SCA_Ordonnee.grid ( row = 4 , column = 1 , sticky = "w" )
tkinter.Label ( TKI_Principal , text = "Facteur X :" , justify = "right" , anchor = "se" ).grid ( row = 5 , column = 0 , sticky = "se" )
SCA_Facteur_X.grid ( row = 5 , column = 1 , sticky = "w" )
BUT_RaZ.grid ( row = 5 , column = 2 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "Facteur Y :" , justify = "right" , anchor = "se" ).grid ( row = 6 , column = 0 , sticky = "se" )
SCA_Facteur_Y.grid ( row = 6 , column = 1 , sticky = "w" )
BUT_Quitter.grid ( row = 6 , column = 2 , sticky = "nesw" )
SCA_Abscisse.set ( 200 )
SCA_Ordonnee.set ( 200 )
SCA_Facteur_X.set ( 1 )
SCA_Facteur_Y.set ( 1 )
FNC_Pivot ( )
TKI_Principal.mainloop ( )
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de