[Richard Suchenwirth] 2007-01-23 - Waiting for a lengthy zipping, I hacked up this plaything that simulates credits of a movie, rolling over the [canvas] screen. [WikiDbImage credits.jpg] ---- [Jeff Smith] 2020-11-06 : Below is an online demo using [CloudTk]. This demo runs Rolling credits in an Alpine Linux Docker Container. It is a 27.4MB image which is made up of Alpine Linux + tclkit + Rolling-credits.kit + libx11 + libxft + fontconfig + ttf-linux-libertine. It is run under a user account in the Container. The Container is restrictive with permissions for "Other" removed for "execute" and "read" for certain directories. <> <> ---- ====== package require Tk proc titleshow {w title} { set -fill black set -font {Helvetica 16} set x [expr {[winfo width $w]/2}] set y [winfo height $w] foreach line [split $title \n] { set line [string trim $line] if [string match -* $line] { eval [linsert $line 0 set] } else { $w create text $x $y -text $line -fill ${-fill} -font ${-font} \ -justify center -tag title incr y 48 } } every 40 "if !\[titleshow'roll $w title -2\] return" } proc titleshow'roll {w tag dy} { $w move $tag 0 $dy ;# (1) foreach i [$w find withtag $tag] { set y1 [lindex [$w bbox $i] end] if {$y1<0} {$w delete $i} } llength [$w find withtag $tag] } proc every {ms body} {eval $body; after $ms [info level 0]} # That's all the code, here's a testing demo. Lines starting with - set parameters, the others are displayed: pack [canvas .c -bg black] tkwait visibility .c titleshow .c { -fill white -font {Helvetica 18 italic} Richard Suchenwirth presents -font {Helvetica 24 bold} -fill yellow THE IMPORTANCE OF BEING UNEARNEST -font {Helvetica 18} -fill white with -font {Helvetica 24} -fill yellow MARILYN MONROE GARY COOPER PETER SELLERS -font {Helvetica 18} Camera Alphonse de Lumiere Gaffer Joe Smith -font {Helvetica 10} (c) United Hackers, Inc. MMVII } ====== ---- [JM] Richard, this is very nice! do we have something in the wiki to scroll text in the same line? like the news at the bottom of the TV screen? - [RS]: You mean, what is sometimes called a [Ticker]? You could either modify the code above (the line marked (1) in ''titleshow'roll'' has 0 for horizontal movement, put your desired value there); or, you can do it with a plain [label] like this. First, a proc that "cycles" a string variable, so that "abcd" becomes "bcda": proc string'cycle _str { upvar 1 $_str str set str [string range $str 1 end][string index $str 0] } # Example for test and demo: pack [label .l -textvar ticker -anchor w -width 50] set ticker "For all those who like to read news while watching a movie, \ here is a little ticker that displays at the bottom +++ " every 100 {string'cycle ::ticker} [HE] and here is [every] ---- [JM] thanks Richard, thanks [HE], but in fact, "every" proc is in this very same page. btw, homework (based on [RS] hints) is done, and text runs smoother than the label solution. I will publish tomorrow, giving the credit to Richard, of course (-: - [RS]: For smoother scrolling in the label, use a fixed-pitch font. [HE] Found it. I tried only the second example. As I missed "every" I looked for the side where it reside. I know [RS] saves everything about tcl anywhere on the wiki :-) ---- [nscerqueira] in order to repeat the text scrolling just change the lines in the titleshow proc every 40 "if !\[titleshow'roll $w title -2\] return" to every 40 [list titleshow'roll $w $y title -2]n" and in the the titleshow'roll proc if {$y1<0} {$w delete $i} to if {$y1<0} {$w move $i 0 $y} [schelte] gave most of the help to make this possible. And don't forget to add the argument to the titleshow'roll proc , i.e., proc titleshow'roll {w y tag dy} { <>Animation