Chapter 46. Writing a Tk Widget in C
This chapter describes the implementation of a simple clock widget. Two implementations are shown: the original string-based command interface and the Tcl_Obj command interface.
A custom widget implemented in C has the advantage of being efficient and flexible. However, it requires more work, too. This chapter illustrates the effort by explaining the implementation of a clock widget. It is a digital clock that displays the current time according to a format string. This is something you could implement in several lines of Tcl using a label widget, the clock command, and after for periodic updates. However, the point of the example is to show the basic structure for a Tk widget implemented in C, not how much easier Tcl programming is :-). The implementation of a widget includes:
A data structure to describe one instance of the widget.
A class procedure to create a new instance of the widget.
An instance procedure to operate on an instance of the widget.
A set of configuration options for the widget.
A configuration procedure used when creating and reconfiguring the widget.
An event handling procedure.
A display procedure.
Other widget-specific procedures.
Two implementations are compared: string-based and Tcl_Obj based. The version that uses Tcl_Obj values can interpret command line options more efficiently. A new option parsing package hides most of the details. The string-based version of each procedure is shown first, and then the Tcl_Obj version is shown for comparison. The display portion of the code is the same in the two versions.