Bonjour la communauté Tcl/Tkeuse
Mon 1ier message ! J'aurais préféré que ce soit pour autre chose que demander de l'aide, enfin bon... Je vais faire simple je suis relativement bien perdu vis-à-vis de ce langage. Je n'arrête pas de lire et relire la documentation en ligne et rien n'y fait. Quand j'ai l'impression d'enfin comprendre comment fonctionne quoi que ce soit, dans l'heure qui suit le vent tourne complétement.
Je veux faire une interface utilisant le widget ttk::notebook. Ça marche plutot bien jusqu'au moment au je veux fermer un onglet.
Pour fermer un onglet, je dois d'abord reconnaitre le numéro de cet onglet (c'est la seule méthode que j'ai touvé). Je ne peux pas le donner directement puisqu'il va dépendre de l'utilisateur (c'est lui qui décidera lequel il fermera) donc je dois passer par cette méthode qui utilise cette commande qui commence à me souler
Pourquoi dans tous les cas que j'ai essayé, je ne reçois rien en retour de cette commande ! Est-ce que je donne les mauvaises entrées ?
Code tcl/tk : Sélectionner tout - Visualiser dans une fenêtre à part .wdgnbk identify tab $x $y
...
Bref je reste ouvert à tout commentaire constructif
Code tcl/tk : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150 namespace eval instruMultiPanel { # Masques disponibles et leur status d'affichage variable masquedispo {Masque1 Masque2 Masque3 Masque4 Masque5 Masque6} variable masquevisible {1 1 1 0 0 0} variable x_crs 0 y_crs 0 # APPEL: Par sélection dans la liste des masques # EFFET: Change de masque et affiche le nouveau à la place proc changermasque {} { #index de l'élément sélectionné dans la Listbox set selec [.listemasques curselection] #index de l'onglet actif du ttk::notebook set ongletactif [string index [.nb select] end] if {$selec != $ongletactif} { if {[lindex $::instruMultiPanel::masquevisible $selec] == 0} { set ongletnom [lindex $::instruMultiPanel::masquedispo $selec] .nb add [frame .nb.f$selec] -text $ongletnom set ::instruMultiPanel::masquevisible [lreplace $::instruMultiPanel::masquevisible $selec $selec 1] } .nb select .nb.f$selec } } # APPEL: (relachement du) clic droit dans l'onglet # EFFET: Acquisition de l'emplacement du clic pour y afficher un menu contextuel proc popupFermerMasque {} { puts "début de la procédure de fermeture" # Acquisition de l'emplacement du clic droit variable x_crs [winfo pointerx .] variable y_crs [winfo pointery .] # variable x_rt [winfo vrootx .] # variable y_rt [winfo vrooty .] puts "pos x= $x_crs, pos y= $y_crs" # puts "pos xrt= $x_rt, pos yrt= $y_rt" #puts "x_rt [winfo vrootx .] y_rt [winfo vrooty .]" puts "x [winfo x .] y [winfo y .]" puts "x [expr [winfo pointerx .]-[winfo x .]] y [expr [winfo pointery .]-[winfo y .]]" variable xcoord variable ycoord set xcoord(crs) $x_crs set ycoord(crs) $y_crs set xcoord(deux) [winfo x .] set ycoord(deux) [winfo x .] set xcoord(trois) [expr [winfo pointerx .]-[winfo x .]] set ycoord(trois) [expr [winfo pointery .]-[winfo y .]] # affichage du menu contextuel # tk_popup .mn_ongl_cls %X %Y tk_popup .mn_ongl_cls $x_crs $y_crs } # APPEL: Clic gauche dans le menu contextuel # EFFET: Acquisition de l'onglet sélectionné pour le fermer proc fermerOnglet {} { variable x_crs variable y_crs variable ongletID # set ongletID [.nb identify tab %X %Y] set ongletID [.nb identify tab $x_crs $y_crs] puts "close, X=$x_crs Y=$y_crs" puts "ongletID=$ongletID" # .nb hide $ongletID puts "onglet clos" variable xcoord variable ycoord set onglID(crs) [.nb identify tab $xcoord(crs) $ycoord(crs)] set onglID(deux) [.nb identify tab $xcoord(deux) $ycoord(deux)] set onglID(trois) [.nb identify tab $xcoord(trois) $ycoord(trois)] puts "x $xcoord(crs) y $ycoord(crs) -> onglID(crs)=$onglID(crs)" puts "x $xcoord(deux) y $ycoord(deux) -> onglID(deux)=$onglID(deux)" puts "x $xcoord(trois) y $ycoord(trois) -> onglID(trois)=$onglID(trois)" # --- À FAIRE --- # masquevisible à actualiser (le 1 de l'onglet à RAZ)! # Widgets du masque aussi à enlever # mais ATTENTION: set tab [.nb identify tab x y] -> .nb hide $tab } # APPEL: À partir du programme principal # EFFET: Mise en place et affichage widgets principals (liste de masques et notebook) proc createdialog {} { # --------------- # --- Widgets --- # --------------- # ---> choix du masque grid [ttk::labelframe .f00 -text Maskenliste -padding 3] -row 0 -column 0 -padx 3 -pady 3 -sticky ns listbox .listemasques -height 10 -width 15 -listvariable instruMultiPanel::masquedispo -yscrollcommand {.scrllist set} \ -selectmode single ttk::scrollbar .scrllist -orient vertical -command ".listemasques yview" pack .listemasques .scrllist -in .f00 -side left -anchor n -fill y # Colorize alternating lines of the listbox for {set i 0} {$i<[llength $instruMultiPanel::masquedispo]} {incr i 2} { .listemasques itemconfigure $i -background #f0f0ff } # ---> Gestionnaire d'onglets (notebook) grid [ttk::notebook .nb] -row 0 -column 1 -sticky n for {set i 0} {$i<3} {incr i} { .nb add [frame .nb.f$i] -text "[lindex $instruMultiPanel::masquedispo $i]" } .nb select .nb.f1 ttk::notebook::enableTraversal .nb # Référence des widgets par leur affichage dans l'onglet prévu variable ind_ongl_masque0 .nb.f0 variable ind_ongl_masque1 .nb.f1 # ---> menu contextuel de fermeture d'onglet menu .mn_ongl_cls -tearoff 0 .mn_ongl_cls add command -label "Fermer l'onglet" -command instruMultiPanel::fermerOnglet # ---------------- # --- Bindings --- # ---------------- # ---> Changement de masque (resp. affichage) bind .listemasques <ButtonRelease-1> instruMultiPanel::changermasque # ---> Fermeture d'onglet bind .nb <ButtonRelease-3> instruMultiPanel::popupFermerMasque # ------------------------------------ # --- Affichage des autres onglets --- # ------------------------------------ #createdialogSteuerung ind_ongl_masque0 #createdialogACC ind_ongl_masque1 } # Charger les scripts des différents masques disponibles #source C:/work_yw/tcl_labo/multipanel/maskSteuerung.tcl #source C:/work_yw/tcl_labo/multipanel/maskACC.tcl } # ------------------- # Programme Principal # ------------------- ::instruMultiPanel::createdialog
Partager