Previous: Procedures
Up: Widgets
Next: Using radio buttons
Previous Page: Procedures
Next Page: Using radio buttons

Data entry example

With the widgets so far described, it is possible to make a small data entry example. It is not very sophisticated, and carries out no data validation, but illustrates the ease of creating a data entry screen.

The following personal data is to be collected:

Surname, First names, Address, Telephone number, Sex, Age

For the Surname, First names, Telephone number and Age, entry widgets will be used. For the Address, a text widget will be used, and for the Sex input, a radiobutton will be used.

The layout of the display will have a column of labels to the left, with a column of entry and other widgets to the right.

This can be implemented using two frames, one for each column.

Additionally, when all the data is entered, a Save button will store the data in a file, for future use, either by a TCL program, or by an external program, and a Quit button wll cause the program to finish.

#Define 2 frames - 1 to contain the columns, and 1 to contain the 
     #Save and Quit button.

frame .fr1 frame .fr2

#Define two frames for the columns frame .fr1.c1 frame .fr1.c2

#define labels label .fr1.c1.lab1 -text "Surname" label .fr1.c1.lab2 -text "First Names" label .fr1.c1.lab3 -text "Address" label .fr1.c1.lab4 -text "Telephone Number" label .fr1.c1.lab5 -text "Sex" label .fr1.c1.lab6 -text "Age"

#Now define the other widgets for the data entry .fr1.c2.surname1 -width 30 -relief sunken -textvariable surname entry .fr1.c2.firstname1 -width 30 -relief sunken -textvariable firstnames entry .fr1.c2.address1 -width 30 -relief sunken -textvariable address entry .fr1.c2.telephone -width 20 -relief sunken -textvariable telno entry .fr1.c2.age1 -width 20 -relief sunken -textvariable age entry .fr1.c2.sex1 -width 20 -relief sunken -textvariable sex

#We shall defer consideration of the use of radio buttons for #the next section, so we will simply allocate an entry widget for #Sex for the moment.

#Now define the buttons for saving and quitting button .fr2.button1 -text "Save" -command {savecommand} button .fr2.button2 -text "Quit" -command {exit}

#Note: the command for save could be done by system #dependent commands, or by TCL commands. #For portability it is best to package them into a TCL procedure

#Now pack all the widgets together - first within each frame #Column 1 widgets pack .fr1.c1.lab1 .fr1.c1.lab2 .fr1.c1.lab3 .fr1.c1.lab4 .fr1.c1.lab5 .fr1.c1.lab6 -pady 1m #Column 2 widgets pack .fr1.c2.surname1 .fr1.c2.firstname1 .fr1.c2.address1 .fr1.c2.telephone .fr1.c2.sex1 .fr1.c2.age1 -padx 3m -pady 1m -fill x #Now pack frames side by side pack .fr1.c1 .fr1.c2 -side left

#now develop the procedure for saving the data file

proc savecommand {} { #external variables have to be declared as "global" global surname firstnames address telno sex age set file [open /tmp/outfile w] puts $file $surname puts $file $firstnames puts $file $address puts $file $telno puts $file $sex puts $file $age close $file }

#Note: In Unix this could have been written as # proc savecommand {} { # global surname firstnames address telno sex age # exec echo $surname > /tmp/outfile # exec echo $firstnames >> /tmp/outfile # exec echo $address >> /tmp/outfile # exec echo $telno >> /tmp/outfile # exec echo $sex >> /tmp/outfile # exec echo $age >> /tmp/outfile # }

# And finally pack the Save and Quit buttons at the bottom pack .fr2.button1 .fr2.button2 -padx 2m -pady 1m -fill x pack .fr1 pack .fr2 -padx 2m -pady 1m -fill x

csstddm@brunel.ac.uk
Fri Aug 19 16:55:19 BST 1994