"Fossies" - the Fresh Open Source Software Archive

Member "install-tl-20200916/tlpkg/tltcl/lib/tk8.6/demos/plot.tcl" (17 Mar 2020, 2758 Bytes) of package /windows/misc/install-tl.zip:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Tcl/Tk source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 # plot.tcl --
    2 #
    3 # This demonstration script creates a canvas widget showing a 2-D
    4 # plot with data points that can be dragged with the mouse.
    5 
    6 if {![info exists widgetDemo]} {
    7     error "This script should be run from the \"widget\" demo."
    8 }
    9 
   10 package require Tk
   11 
   12 set w .plot
   13 catch {destroy $w}
   14 toplevel $w
   15 wm title $w "Plot Demonstration"
   16 wm iconname $w "Plot"
   17 positionWindow $w
   18 set c $w.c
   19 
   20 label $w.msg -font $font -wraplength 4i -justify left -text "This window displays a canvas widget containing a simple 2-dimensional plot.  You can doctor the data by dragging any of the points with mouse button 1."
   21 pack $w.msg -side top
   22 
   23 ## See Code / Dismiss buttons
   24 set btns [addSeeDismiss $w.buttons $w]
   25 pack $btns -side bottom -fill x
   26 
   27 canvas $c -relief raised -width 450 -height 300
   28 pack $w.c -side top -fill x
   29 
   30 set plotFont {Helvetica 18}
   31 
   32 $c create line 100 250 400 250 -width 2
   33 $c create line 100 250 100 50 -width 2
   34 $c create text 225 20 -text "A Simple Plot" -font $plotFont -fill brown
   35 
   36 for {set i 0} {$i <= 10} {incr i} {
   37     set x [expr {100 + ($i*30)}]
   38     $c create line $x 250 $x 245 -width 2
   39     $c create text $x 254 -text [expr {10*$i}] -anchor n -font $plotFont
   40 }
   41 for {set i 0} {$i <= 5} {incr i} {
   42     set y [expr {250 - ($i*40)}]
   43     $c create line 100 $y 105 $y -width 2
   44     $c create text 96 $y -text [expr {$i*50}].0 -anchor e -font $plotFont
   45 }
   46 
   47 foreach point {
   48     {12 56} {20 94} {33 98} {32 120} {61 180} {75 160} {98 223}
   49 } {
   50     set x [expr {100 + (3*[lindex $point 0])}]
   51     set y [expr {250 - (4*[lindex $point 1])/5}]
   52     set item [$c create oval [expr {$x-6}] [expr {$y-6}] \
   53         [expr {$x+6}] [expr {$y+6}] -width 1 -outline black \
   54         -fill SkyBlue2]
   55     $c addtag point withtag $item
   56 }
   57 
   58 $c bind point <Any-Enter> "$c itemconfig current -fill red"
   59 $c bind point <Any-Leave> "$c itemconfig current -fill SkyBlue2"
   60 $c bind point <1> "plotDown $c %x %y"
   61 $c bind point <ButtonRelease-1> "$c dtag selected"
   62 bind $c <B1-Motion> "plotMove $c %x %y"
   63 
   64 set plot(lastX) 0
   65 set plot(lastY) 0
   66 
   67 # plotDown --
   68 # This procedure is invoked when the mouse is pressed over one of the
   69 # data points.  It sets up state to allow the point to be dragged.
   70 #
   71 # Arguments:
   72 # w -       The canvas window.
   73 # x, y -    The coordinates of the mouse press.
   74 
   75 proc plotDown {w x y} {
   76     global plot
   77     $w dtag selected
   78     $w addtag selected withtag current
   79     $w raise current
   80     set plot(lastX) $x
   81     set plot(lastY) $y
   82 }
   83 
   84 # plotMove --
   85 # This procedure is invoked during mouse motion events.  It drags the
   86 # current item.
   87 #
   88 # Arguments:
   89 # w -       The canvas window.
   90 # x, y -    The coordinates of the mouse.
   91 
   92 proc plotMove {w x y} {
   93     global plot
   94     $w move selected [expr {$x-$plot(lastX)}] [expr {$y-$plot(lastY)}]
   95     set plot(lastX) $x
   96     set plot(lastY) $y
   97 }