Tk
« Tk: alcuni widget: comando
entry • Appunti di Tcl/Tk •
Tk: alcuni widget: comando »
comando listbox
Questo tipo di widget visualizza una lista di stringhe, una per
linea e permette di selezionare uno o più elementi dalla
lista. Le listbox supportano lo scrolling sia in orizzontale che in
verticale tramite le opzioni standard -xscrollcommand e -yscrollcommand.
Ogni elemento della lista è individuato da un indice
testuale. I vari tipi di indice sono:
- number
- indica l'elemento in base al suo numero d'ordine, a partire da
0 che corrisponde al primo elemento della lista
- active
- indica l'elemento su cui si trova il cursore di locazione, che
per default è visualizzato nello stile sottolineato quando
la listbox ha il focus
- anchor
- indica il punto di ancoraggio della selezione
(l'estremità di una selezione che rimane fissa quando si
trascina per definire una selezione col mouse)
- end
- indica la fine della lista; per la maggior parte dei comandi
end significa l'ultimo elemento, ma per alcuni comandi come index e
insert, end si riferisce all'elemento (non ancora esistente) che si
trova subito dopo l'ultimo elemento
- @x,y
- indica l'elemento che comprende il punto di coordinate x,y
relative al widget listbox. Se nessun elemento copre quel punto,
verrà selezionato l'elemento più vicino
Alcuni comandi di widget più importanti:
- pathName insert index ?element element ...?
- Inserisce zero o più nuovi elementi nella lista nella
posizione precedente a quella dell'elemento di indice index. Se
index assume il valore end, allora i nuovi elementi vengono
inseriti alla fine della lista. Ritorna la stringa vuota.
- pathName delete first ?last?
- Elimina uno o più elementi dalla lista. first e last
sono indici che indicano il primo e l'ultimo elemento
dell'intervallo di elementi da eliminare. Se last non viene
specificato viene assunto coincidente con first, ossia verrà
eliminato un solo elemento.
- pathName index index
- Ritorna il valore intero dell'indice che corrisponde all'indice
index. Se index è l'indice testuale end, il valore ritornato
è il numero di elementi nella listbox (non l'indice
dell'ultimo elemento). Un modo più semplice per ricavare il
numero di elementi è usare il comando pathName
size.
- pathName curselection
- Ritorna una lista che contiene gli indici numerici di tutti gli
elementi della listbox che sono attualmente selezionati. Qualora
non vi sia nessun elemento selezionato, ritorna la stringa
vuota.
- pathName get first ?last?
- Se viene omesso last, ritorna il contenuto dell'elemento della
listbox di indice first, oppure una stringa vuota se first si
riferisce ad un elemento che non esiste. Se viene specificato anche
last, il comando ritorna la lista di tutti gli elementi della
listbox con indici compresi tra first e last, estremi inclusi. Sia
first sia last possono assumere una qualsiasi delle forme viste
prima per gli indici.
- pathName see index
- Aggiusta la vista nella listbox in modo che l'elemento indicato
dall'indice index sia visibile. Se l'elemento è già
visibile non ha alcun effetto.
Alcune opzioni specifiche di questo widget:
- -width
- Specifica la larghezza del widget in caratteri. Se si usa un
font proporzionale, la larghezza in unità di schermo
verrà calcolata moltiplicando la larghezza del carattere "0"
per il valore di questa opzione. Per default vale 20.
- -height
- Indica l'altezza desiderata per il widget. Se è zero o
minore di zero, l'altezza sarà giusto quella necessaria per
contenere tutti gli elementi della listbox. Per default vale
10.
- -listvariable
- Specifica il nome di una variabile. Il valore della variabile
deve essere una lista che verrà visualizzata all'interno del
widget; se il valore della variabile cambia, il widget si
aggiornerà automaticamente con il nuovo contenuto. Se si
tenta di assegnare alla variabile un valore non valido come lista,
si ottiene un errore e l'assegnamento non va a buon fine. Se si
tenta di rimuovere una variabile usata da una listbox tramite
questa opzione, usando unset(n), questo fallisce silenziosamente,
ovvero la variabile non verrà rimossa e non verrà
generato alcun errore.
- -selectmode
- Indica in che modo debba essere manipolata la selezione. Assume
i valori single, browse, multiple o extended e il valore di default
è browse, adatto per la selezione di un singolo
elemento.
Nelle modalità single o browse può essere
selezionato al più un elemento della lista (oppure nessuno).
Facendo click su un elemento col tasto 1 del mouse (il sinistro),
lo seleziona e causa la deselezione di un eventuale altro elemento
che era stato selezionato prima.
L'unica differenza tra single e browse è che il modo
browse supporta anche il trascimento della selezione (che si
effettua tenendo premuto il tasto 1 mentre si va su e giù
con il mouse). Nel modo single invece tenendo premuto il tasto 1 e
spostando il mouse avanti e indietro si effettua lo scorrimento ma
la selezione rimane fissa.
Per permettere la selezione di più di un elemento
(persino di intervalli discontinui di elementi), usate invece il
modo multiple oppure extended.
Nel modo extended (il più comunemente usato per le
selezioni multiple) quando si clicca con il tasto 1 su un elemento
lo si seleziona e nel contempo si deselezionano tutti gli altri
elementi; inoltre l'ancora della selezione viene impostata a
partire dall'elemento selezionato: trascinando poi il mouse,
tenendo ancora premuto il tasto 1, estende la selezione in modo da
includere tutti gli altri elementi che si trovano tra l'ancora
della selezione e l'elemento corrente sotto il mouse, estremi
inclusi.
Nel modo multiple invece, cliccando con il tasto 1 su un
elemento si inverte il suo stato di selezione, senza cambiare lo
stato di selezione degli altri elementi.
Ogni volta che la selezione cambia viene innescato l'evento
virtuale <<ListboxSelect>>. Usando il comando bind(n)
si può intraprendere una qualsiasi azione di risposta ad un
cambiamento di selezione del widget.
Un esempio:
label .msg -wraplength 3i -font {Helvetica 12} \
-text {Select your favourite programming \
languages from the list below:}
pack .msg -side top
set f [frame .box -borderwidth .5c]
pack $f -side top -expand 1 -fill y
listbox $f.list -yscroll "$f.vscroll set" \
-width 12 -height 8 -selectmode extended
scrollbar $f.vscroll -command "$f.list yview"
pack $f.list -side left -expand 1 -fill both
pack $f.vscroll -side right -fill y
set f [frame .but]
pack $f -side bottom -fill x -pady 2m
button $f.ok -text OK -default active -command {
curselection .box.list
destroy .
}
button $f.cancel -text Cancel -command {destroy .}
pack $f.ok $f.cancel -side left -expand 1
bind . <Return> {.but.ok invoke}
bind . <Escape> {.but.cancel invoke}
.box.list insert 0 Assembler Basic C C++ Eiffel \
Forth Fortran Haskell Java Lisp Logo {Objective C} \
Pascal Perl Php Prolog Python Ruby Scheme Tcl other/s
proc curselection {w} {
set cursel [$w curselection]
if {$cursel!=""} {
foreach element $cursel {
append msg [$w get $element]\n
}
tk_messageBox -title languages -message $msg
}
}
« Tk: alcuni widget: comando
entry • Appunti di Tcl/Tk •
Tk: alcuni widget: comando »