2017-08-10 3 views
0

Je suis en train de créer une zone de forme simple, en fin de compte pour placer les données dans une base de données. En ce moment, je suis simplement le tester avec puts déclarations, comme suit:Obtenir la valeur de textvariable (widget entrée)

package require Tk 

wm title . "Add" 
grid [ttk::frame .c -padding "3 3 12 12"] -column 0 -row 0 -sticky nwes 
grid columnconfigure . 0 -weight 1; grid rowconfigure . 0 -weight 1 

grid [ttk::label .c.idlbl -width 7 -text "id"] -column 1 -row 1 -sticky we 
grid [ttk::entry .c.id -width 7 -textvariable id] -column 2 -row 1 -sticky we 

grid [ttk::label .c.txtlbl -text "text"] -column 1 -row 2 -sticky w 
grid [ttk::entry .c.txt -width 7 -textvariable text] -column 2 -row 2 -sticky we 


grid [ttk::button .c.calc -text "Add!" -command db_add] -column 1 -row 3 -sticky w 

foreach w [winfo children .c] {grid configure $w -padx 5 -pady 5} 
focus .c.id 


proc db_add {} { 
    set id $::id 
    set text $::text 
    puts $id 
    puts $text 
} 

Ma question: pourquoi dois-je faire set dans un autre nom de la variable, avant que je puisse faire quoi que ce soit avec la valeur? Pourquoi ne puis-je pas simplement faire puts $::id?

J'ai essayé puts expr{$::id}, qui donne une sortie comme expr{Whatever Text Was Entered}, me laissant incertain pourquoi le expr ne part pas. Il semble que mon concept de variables dans TCL est très trouble pour le moment.

+0

Il semble que votre connaissance de l'invocation des commandes soit insuffisante. Tcl n'a que [12 règles de syntaxe] (https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm), lisez-les. –

+0

Vous voulez 'puts [expr $ :: id]' –

Répondre

0

Vous pouvez pouvez utiliser puts $::id, mais jusqu'à ce que vous avez entré du texte dans les champs de saisie, les variables n'existent pas. Vous pouvez les initialiser en parallèle avec la création des widgets, ou les tester pour leur existence:

if {![info exists ::id]} { 
    set ::id {} 
} 
puts \$::id=$::id