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 .
Remarque : ces commandes vous donneront la largeur et la hauteur en pixels de la surface d'affichage.
Par contre, dans le cas de plusieurs ecran connectes, il vous donnera la largeur et hauteur totale de la surface d'affichage.
De ce aue je comprends, en utilisant la commade xrandr dans un terminal vous pourrez ajuster votre fenetre une fois la resolution de vos ecrans definis.

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 :

  • Créer une image
  • la  définir en tant que : iconphoto par défaut.

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 :

  • mafenetre est le nom de votre form
  • monimage : le nom de votre image créé par image create etc...

Rendre la form non redimensionnable

Pour bloquer la taille de la Form, utilisez la commande resizable comme ceci :

wm resizable .maform 0 0

ou :

  • maform : le nom de votre fenêtre
  • le premier 0 : non redimensionnable en X
  • le 2eme 0 : Non redimensionnable en Y

Definir le titre d'une fenetre

utilisez la commande titre :

wm title .mafenetre "mon titre"

ou

  • mafenetre : la fenêtre à afficher
  • "mon titre" : le label à afficher dans le titre.

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 :

  • X
  • Y
  • largeur
  • Hauteur

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.

 

 

 

 

 

 

 

jos, le 18 février 2025 à 16:44

Bonjour

sous Linux (64 bits) comment débuter en Tcl/Tk ? que faut-il installer ? Quels outils  ?

 

Merci

https://jos.alwaysdata.net/


fabien, le 20 août 2024 à 09:45

essai de commentaire