FENETRE
La fenêtre est le conteneur principal qui contient tous les autres widgets.
En tk la fenêtre principale (fenêtre mère) est nommée . (point).
Il existe une fenêtre mère qui est la fenêtre principale, et vous pouvez créer tout un tas de fenêtres filles.
Voici des tutoriels sur l'utilisation d'une fenêtre :
Introduction
Une fenêtre est l'élément conteneur par défaut de toute application réalisée en TK.
La fenêtre mère est nommée par un point.
Mếme si elle n'est pas définie dans cet exemple ci-dessous, elle sera créée de manière implicite.
button .b1 -text "cliquez moi" pack .b1
Le résultat produit est :
Pour changer la taille par exemple, nous devons utiliser la commande wm :
wm geometry . 100x100+200+200
Pour créer une fenêtre fille, c'est à dire une autre fenêtre en plus de celle déjà crée, il faut utiliser la commande toplevel suivi du nom de votre nouvelle fenêtre comme ceci :
button .b1 -text "cliquez moi" -command {leclic} pack .b1 proc leclic {} { toplevel .f2 wm geometry .f2 100x100+200+200 }
Vous pourrez constater que si vous fermez la fenêtre où il y a le bouton, c'est à dire la fenêtre mère, le programme se ferme en fermant toutes les autres fenêtres.
Ajuster la taille d'une fenêtre
Pour ajuster la taille de la fenetre mère:
wm geometry . 100x200+300+400
largeur : 100 pixels
hauteur: 200 pixels
position en X : 300
position en Y : 400
Centrer une fenêtre à l'écran
Pour centrer une fenêtre mère à l'écran :
set width 350 set height 250 set x [expr { ( [winfo vrootwidth .] - $width ) / 2 }] set y [expr { ( [winfo vrootheight .] - $height ) / 2 }] wm title . "Center" wm geometry . ${width}x${height}+${x}+${y}
Ce n'est pas tout à fait vrai pour un multi écran, car cette commande centre la fenêtre sur la planche entière sur le double écran par exemple.
Fermer / Quitter une fenêtre
Pour fermer la fenêtre mère et toutes les fenêtres filles , utilisez la commande exit fermera toute l'application comme ci-dessous :
button .hello -text "Quit" -command { exit } place .hello -x 50 -y 50 wm title . "Quit button" wm geometry . 350x250+300+300
la commande EXIT ferme l'application complète.
Pour fermer juste une fenêtre fille concernée faire :
button .hello -text "Quit" -command {destroy $mafenetre}
Enlever les bordures de la fenêtre
Pour enlever les bordures de votre fenêtre fille nommée .top par exemple, écrivez ceci :
wm overrideredirect . 1
Connaître la résolution de votre écran
Pour connaître la résolution de votre écran écrivez ceci :
winfo screenwidth . winfo screenheight .
Maximiser une fenêtre à l'ouverture
Pour maximiser une fenêtre à l'ouverture quelque soit la plateforme sur laquelle est lancé votre script TCL voici le code :
wm title . "Center" wm geometry . [winfo vrootwidth .]x[winfo vrootheight .]+0+0
definir une icone pour notre application
Pour afficher une icone en haut à gauche de la fenêtre ou dans la barre des tâches pour notre application voici comment faire :
un exemple :
# icone de l'application image create photo icapp -file "./img/icon.png" wm iconphoto . -default icapp
Connaitre la resolution de l'ecran, les couleurs, le nombre de pixel
Connaitre le nombre de couleur, le nombre de pixel par pouce ou la résoltion de votre écran, voici le code :
puts "color depth=[winfo screendepth .] ([winfo screenvisual .])" puts "pixels per inch=[winfo pixels . 1i]" puts "width=[winfo screenwidth .] height=[winfo screenheight .]"
definir une icone pour la fenetre
Pour définir une icone pour la fenêtre, utilisez la commande iconphoto :
wm iconphoto .mafenetre -default monimage
ou :
Rendre la form non redimensionnable
Pour bloquer la taille de la Form, utilisez la commande resizable comme ceci :
wm resizable .maform 0 0
ou :
Definir le titre d'une fenetre
utilisez la commande titre :
wm title .mafenetre "mon titre"
ou
Afficher une fenêtre en arriere plan de toutes les fenetres
Si vous souhaitez mettre une fenêtre en arrière plan de toutes les autres à la façon d'un bureau XFCE, gnome ou KDE, vous pouvez utiliser cette commande :
lower .mafenetre
Erreur quand une fenetre existe
Quand une fenêtre existe, et que vous demandez sa réouverture, un message d'erreur apparait, normal puisque l'objet est déjà créé. Ill suffit simplement d'écrire cette procédure avant la création de votre fenêtre:
# Test if form already exists proc Test_Form_Exist {f} { if {[winfo exist $f]==1} {destroy $f} }
maximiser toutes les fenetres de votre application
J'ai ecris une procedure pour maximiser toutes les fenetres que vous souhaitez dans votre application.
Il suffit juste apres l'avoir cree (apres toplevel), ecrivez ceci :
Form_Full_View .mafenetre
Voici ci-dessous la procedure de maximisation :
proc Form_Full_View {w} { set wi [winfo vrootwidth $w] ; set he [winfo vrootheight $w] set sep "x" wm geometry $w $wi$sep$he+0+0 }
mettre une fenetre toujours devant les autres
Il suffit d'ecrire ce code :
wm attribute .mafenetre -topmost 1
La fenetre se retrouvera devant quelque soit ou vous cliquez sur l'ecran.
Cette commande fonctionne aussi sur le multi-ecran
placer la fenetre ou redimensionner
l'option geometry de la commande wm lie la position de la fenetre a sa dimension par la formule :
wm geometry CoordonneeX x CoordonneeY + Largeur + Hauteur.
Nous allons voir ci-dessous comment les separer .
Si vous voulez juste definir des coordonnes (x=100,y=200 par exemple) pour placer la fenetre sans la redimensionner ecrivez ceci :
wm geometry .mafenetre +100+200
Si par contre vous souhaitez uniquement la redimensionner sans la deplacer :
wm geometry .mafenetre 180x250
Si vous souhaitez juste la deplacer en x (au pixel 34 par exemple), ecrivez ceci :
set x 34 wm geometry .mafenetre +${x}+200
enfin, si vous souhaitez par exemple redimensionner la fenetre en hauteur a 230 et la deplacer au pixel 567, ecrivez
set wi 230 set x 567 wm geometry .mafenetre ${wi}x345+${x}+200
RECUPERER LES DIMENSIONS OU COORDONNES DURANT UN DEPLACEMENT
Lorsque vous deplacez ou redimensionnez une form, elle reagit a l'evenement configure. Ainsi il vous est facile de recuperer les coordonnees ou la taille par cette commande :
bind .mafenetre <Configure> {puts [wm geometry .mafenetre]}
Le resultat sera sous la forme : XxY+W+H qui sont respectivement :
Chamger la couleur de fond
Il est possible de changer la couleur de la fenêtre mère par la commande :
. config -bg black
par exemple le fond de couleur noire.