Screenshot
package require Tk #network activity icon # 2004-06-12 Steve Redler IV set ::networkright [image create photo .networkright -data { R0lGODlhEAAQAKUAALq6y4mmz3l5y5O2xoXP94/g/7Hn9Mb8/53c9ZHK7Z/o /6Pq/5nl/47a+4zf/3HR/zg4XmfM/13H/zSz/1Sz9oSEzcXF2ZeX0G5uzFJf ll1dnN7e37Cw1pOTzI+PwFR5qYmJ1GFhxsfH2+Dg4dnZ3c3N3bm5zJmZwJeX wMDA4Ht7zIqKv1JghfPz8/Ly8sDA26CgzJKSwNLS262txYeJtf////////// /////////////////////////////////yH5BAEKAD8ALAAAAAAQABAAAAZ6 wJ9wCCgCAkjBcPkbEAqGAyKhZAqdBcWC0aj+jMckg+F4eAeQtFoQaUfO6nVb IoHHIYLJhEKxxwUVFV5Xd3gWFxgZSwMajY4CGxwdHkwfIJchIiMkJSYnTCgp hyorKKYoLEsXLS4bLzAxVkMXJCMyJTM0skOnpru/u0EAOw==}] set ::networkleft [image create photo .networkleft -data { R0lGODlhEAAQAKUAALq6y4mmz3l5y5O2xjg4XoXP94/g/7Hn9Mb8/5zn/5HK 7Znl/4HZ/3rV/2fM/11dnGTK/4SEzUe8/07A/0q+/0Sx+cXF2ZeX0G5uzFJf llSz9t7e37Cw1pOTzI+PwFR5qYmJ1GFhxsfH2+Dg4dnZ3c3N3bm5zJmZwJeX wMDA4Ht7zIqKv1JghfPz8/Ly8sDA26CgzJKSwNLS262txYeJtf////////// /////////////////////////////////yH5BAEKAD8ALAAAAAAQABAAAAZ+ wJ9wCCgCAkjBcPkbEJ5QJVPohD6lP+MxacUOCoYDIqEQdIdfw2JdMEfRBYa8 4RA87g+vY7+HCCIRWFQSEhMTFBUCFhcYGUsDGpGSAhscHR5MHyCbISIjJCUm J0woKYsqKyiqKCxLFy0uGy8wMVNDFyQjMiUzNLZDq6q/w79BADs=}] set ::networkon [image create photo .networkon -data { R0lGODlhEAAQAKUAALq6y4mmz3l5y5O2xoXP94/g/7Hn9Mb8/53c9ZHK7Z/o /6Pq/5nl/47a+4zf/3HR/5zn/2fM/13H/4HZ/3rV/zSz/1Sz9mTK/4SEzUe8 /07A/0q+/0Sx+cXF2ZeX0G5uzFJflt7e37Cw1pOTzI+PwFR5qYmJ1GFhxsfH 2+Dg4dnZ3c3N3bm5zJmZwJeXwMDA4Ht7zIqKv1JghfPz8/Ly8sDA26CgzJKS wNLS262txYeJtf///////////////////yH5BAEKAD8ALAAAAAAQABAAAAaD wJ9wCCgCAkjBcPkbEAqGAyKhZAqdBcWC0aj+jMckg+F4eLFRCDXCjpyfYwZB wJZI3pM8xV2pWCxnbWwXAhgYXlcZGRoaGxwCHR4fIEsDf5eAISIjJEwlJqAn KCkqKywtTC4vkTAxLq8uMkseMzQhNTY3VkMeKik4Kzk6u0Owr8TIxEEAOw==}] set ::networkoff [image create photo .networkoff -data { R0lGODlhEAAQAKUAALq6y4mmz3l5y5O2xjg4Xl1dnISEzcXF2ZeX0G5uzFJf lt7e37Cw1pOTzI+PwFR5qYmJ1GFhxsfH2+Dg4dnZ3c3N3bm5zJmZwJeXwMDA 4Ht7zIqKv1JghfPz8/Ly8sDA26CgzJKSwNLS262txYeJtf////////////// //////////////////////////////////////////////////////////// /////////////////////////////////yH5BAEKAD8ALAAAAAAQABAAAAZo wJ9wCCgCAkjBcPkbEJ5QJVPohD6lP+MxacVWu93hNxqmWq+FdMF7JggMBqz5 LDggEorlQK0WLBgNDkwPEIUREhMUFRYXTBgZdhobGJQYHEsIHR4LHyAhU0MI FBMiFSMkoEOVlKmtqUEAOw==}] set ::networknc [image create photo .networknc -data { R0lGODlhEAAQAKUAALq6y4mmz3l5y5O2xjg4Xv8CAtIOFrwUINF8iJWTuHom P00yU4drtOgIDJAgNcM3W25Ti11dnNIpRYSEzaYaK9GaqZeX0G5uzFJfloBJ evsbG7Cw1pOTzI+PwFR5qYmJ1OQgMMohQ8fH2+Dg4foaGuhcY7m5zJmZwJeX wMDA4N5uefMSGYlttYqKv612lqKGq1JghfPz8/PX19treqCgzJKSwNnZ3dLS 283N3a2txYeJtf///////////////////yH5BAEKAD8ALAAAAAAQABAAAAaK wJ9wCCgCAkjBcPkbEJ5QJbPQhBoOBOnPiCgkAgJFYZEdOp8HA4HRcDy1Z8Ki oXio32YoQdEoQCKAcHoEBRITE1pCcQQUfRUWFxhLA4AREAUZDxobHB1MHh8f ICEiIyQlJidMKCkqKywtKC4FLzBLFjEyGjM0NUIFVLc2Izc4OTpMqyjLKMnO z0tBADs=}] proc blinkoff {labelname dir} { switch $dir { tx {set ::txlight 0} rx {set ::rxlight 0} } if {$::rxlight && $::txlight} { $labelname configure -image $::networkon return } if {$::rxlight && ! $::txlight} { $labelname configure -image $::networkright return } if {! $::rxlight && $::txlight} { $labelname configure -image $::networkleft return } $labelname configure -image $::networkoff } proc blinkon {labelname dir} { switch $dir { tx {if {$::txlight} { return } else { set ::txlight 1 after 400 [list blinkoff $labelname tx] } } rx {if {$::rxlight} { return } else { set ::rxlight 1 after 400 [list blinkoff $labelname rx] } } } if {$::rxlight && $::txlight} { $labelname configure -image $::networkon return } if {$::rxlight && ! $::txlight} { $labelname configure -image $::networkright return } if {! $::rxlight && $::txlight} { $labelname configure -image $::networkleft return } $labelname configure -image $::networkoff } #start of demo code set ::txlight 0 set ::rxlight 0 label .label1 -width 4 -borderwidth 1 label .label2 -text "Net Activity" button .button1 -text "connect" -width 10 -command {set ::connected 1; backgroundprocess} button .button2 -text "disconnect" -width 10 -command {set ::connected 0} pack .button1 -fill x pack .button2 -fill x pack .label1 -side left -expand n -fill none pack .label2 -side right -expand n -fill none .label1 configure -image $::networknc -width 16 -height 16 wm geometry . 110x80 update set ::connected 1 proc backgroundprocess {} { if {! $::connected} {.label1 configure -image $::networknc; return} after 10 [list blinkon .label1 rx] after 1000 [list blinkon .label1 tx] after 1500 [list blinkon .label1 rx] after 1500 [list blinkon .label1 tx] after 2000 [list backgroundprocess] }