http://purl.org/tcl/home/man/tcl8.4/TkCmd/entry.htm An entry box is designed to allow the user to enter one line of text for use by the application. : '''entry''' ''widgetName'' ?''options...''? : ''widgetName subcommand ...'' ---- [[INSERT ''normal'' examples of an entry box here - with explanation on the various entry subcommands.]] ---- Hopefully, people will add new pages demonstrating various techniques for doing entry box validation of some common formats, like phone numbers, etc. ---- See also: * [An entry with a history] * [Echo-free password entry] * [entryfield] * [Entry Field Processing] * [Entry Validation] * [Entry box validation for IP address] * [Integer entry validation with range check] * [Right-to-left entry widget] * [Time entry that never contains invalid data] * [Validating Credit Card Check Digits] * [Wcb] * [widget:entry] * [Mac style search entry widget] ---- '''Programmable scientific calculator in two lines:''' (why, it can do ''asin'' and ''log'' ;-) ====== pack [entry .e -textvar e -width 50] bind .e {catch {expr [string map {/ *1.0/} $e]} res; append e " = $res"} ;# RS ====== The [string map] forces floating-point calculation, so people won't be disappointed that 1/2 returns 0 ... See [A little calculator] for discussion. And, as [CL] noted, this thingy is programmable: enter for example ====== [proc fac x {expr {$x<2? 1: $x*[fac [incr x -1]]}}] ====== into the entry, disregard warnings; now you can do ====== [fac 10] ====== and receive ''[[fac 10]] = 3628800.0'' as result... [GWM] I was slightly dissapointed in having to delete the contents of the entry to change the formula significantly so I decided to insert the result in the window title: ====== pack [entry .e -textvar e -width 50] bind .e {catch {expr [string map {/ *1.0/} $e]} res; wm title . " = $res"} ;# RS/GWM variant ====== I find that slightly easier to use. ---- One common question is about "[Echo-free password entry]". Entry has an easy answer: its -show option is useful in precisely this situation. ---- [MG] - A useful thing with entry widgets for working with files is to use the -validatecommand option to show if the file exists. For example: ====== entry .e -textvariable file -width 50 -validate all -validatecommand {isFile %P .e} button .b -text "Browse..." -command {set file [tk_getOpenFile]} pack .e .b proc isFile {f w} { if { [file exists $f] && [file isfile $f] } { $w configure -fg black } else { $w configure -fg red } return 1; };# Mike Griffiths ====== ---- [Peter Newman] 17 March 2005: '''Multi-line''' entry widgets are easily created with the Tk ''text'' widget. See:- * [Multiline expanding entry widget] * [LabelText -A Multi Line Entry Widget] * [Multi-Line Text Entry Widget - With Entry Widget Like Field To Field Tabbing] ---- [Schnexel] Meanwhile I'm thinking about doing a ''single line entry widget'' with the ''text'' widget: I want some digits extend beyond the right edge, but without staining the visible field by a cut part of the first invisible digit... (using monospaced font is of not much help, at least it gets the stain at always 1px wide) ---- [AMG]: I wish that the [[$win insert]] and [[$win delete]] commands were combined into a single [[$win replace]] command that could be used for inserting, changing, and deleting text. Insert text by replacing an empty range with the new text, delete text by replacing a non-empty range with empty string, and change text by replacing a non-empty range with the new text. This would work the same as [[[lreplace]]]. However, lreplace doesn't support appending to a list, but this really ought to be fixed. Also, the notation for inserting would be very weird ([[$win replace $pos -1 newstuff]], where -1 is less than $pos); this can be worked around by retaining [[$win insert]] and [[$win delete]] as wrappers around [[$win replace]], the only command that actually does anything. Why would I like this change? Because I'm writing some key validation code for entry, and it triggers ''two times'' for each text replace operation. When the user highlights a range then types something new, text is first deleted then inserted. I'd like for that to be a single replace event. And since pure inserts and deletes can be defined in terms of replacement, it makes sense to unify the whole lot. ---- [Arts and Crafts of Tcl-Tk Programming] | [Tk syntax help] <> Widget | Command | Dialog