• How can I insert text in slow motion?

    From Luc@21:1/5 to All on Wed Mar 22 21:45:39 2023
    I made this prototype that types text "in slow motion" into a text
    widget. It works as expected in text widgets, but not in labels.
    Can someone please help me with this?

    ------------------------------------
    package require Tk
    wm withdraw .
    catch {destroy .sr}
    set ::SRw [toplevel .sr]
    wm resizable $::SRw 1 1
    tk appname "New project"
    wm title $::SRw "New project"

    frame $::SRw.outerframe
    $::SRw.outerframe configure -background #23ADB5
    $::SRw.outerframe configure -padx 6 -pady 4
    $::SRw.outerframe configure -relief raised -borderwidth 4
    pack $::SRw.outerframe
    text $::SRw.outerframe.textbox
    $::SRw.outerframe.textbox configure -font {Arial 24}
    $::SRw.outerframe.textbox configure -width 40 -height 4 $::SRw.outerframe.textbox configure -background #23ADB5 -fg #ffffff $::SRw.outerframe.textbox configure -padx 10 -pady 4
    pack $::SRw.outerframe.textbox
    label $::SRw.outerframe.label
    $::SRw.outerframe.label configure
    $::SRw.outerframe.label configure -text "Some text."
    $::SRw.outerframe.label configure -font {Arial 16}
    $::SRw.outerframe.label configure -background #ffffff -foreground #000000
    pack $::SRw.outerframe.label -side left

    bind $::SRw <Alt_L><q> {exit 0}

    proc sleep {time} {
    after $time set end 1
    vwait end
    }

    set string "This is a slo mo text insertion test."

    for {set x 0} {$x <= [string length $string]} {incr x} {
    sleep 150
    $::SRw.outerframe.textbox insert end [string index $string $x]
    }
    for {set x 0} {$x <= [string length $string]} {incr x} {
    sleep 150
    $::SRw.outerframe.label configure -text [string range $string 0 [expr [string length $string] -1]]
    }

    --
    Luc


    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From lamuzzachiodi@gmail.com@21:1/5 to All on Wed Mar 22 19:10:32 2023
    Hi,
    Rich is ok.
    The code could be

    for {set x 0} {$x <= [string length $string]} {incr x} {
    sleep 150
    $::SRw.outerframe.label configure -text [string range $string 0 $x]
    }

    or backward

    for {set x 0} {$x <= [string length $string]} {incr x} {
    sleep 150
    $::SRw.outerframe.label configure -text [string range $string 0 [expr [string length $string] -$x-1]]
    }

    Alejandro

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Rich@21:1/5 to Luc on Thu Mar 23 01:53:29 2023
    Luc <luc@sep.invalid> wrote:
    $::SRw.outerframe.label configure -text [string range $string 0 [expr [string length $string] -1]]

    Your expr at the end there is a constant during each loop iteration
    provided "$string" does not change contents during the loop.

    A constant value for the second argumennt to string range is *not* what
    you want for your desired output.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Emiliano@21:1/5 to All on Tue Apr 4 17:38:10 2023
    El miércoles, 22 de marzo de 2023 a las 21:45:45 UTC-3, Luc escribió:
    I made this prototype that types text "in slow motion" into a text
    widget. It works as expected in text widgets, but not in labels.
    Can someone please help me with this?

    ------------------------------------
    package require Tk
    wm withdraw .
    catch {destroy .sr}
    set ::SRw [toplevel .sr]
    wm resizable $::SRw 1 1
    tk appname "New project"
    wm title $::SRw "New project"

    frame $::SRw.outerframe
    $::SRw.outerframe configure -background #23ADB5
    $::SRw.outerframe configure -padx 6 -pady 4
    $::SRw.outerframe configure -relief raised -borderwidth 4
    pack $::SRw.outerframe
    text $::SRw.outerframe.textbox
    $::SRw.outerframe.textbox configure -font {Arial 24} $::SRw.outerframe.textbox configure -width 40 -height 4 $::SRw.outerframe.textbox configure -background #23ADB5 -fg #ffffff $::SRw.outerframe.textbox configure -padx 10 -pady 4
    pack $::SRw.outerframe.textbox
    label $::SRw.outerframe.label
    $::SRw.outerframe.label configure
    $::SRw.outerframe.label configure -text "Some text."
    $::SRw.outerframe.label configure -font {Arial 16}
    $::SRw.outerframe.label configure -background #ffffff -foreground #000000 pack $::SRw.outerframe.label -side left

    bind $::SRw <Alt_L><q> {exit 0}

    proc sleep {time} {
    after $time set end 1
    vwait end
    }

    set string "This is a slo mo text insertion test."

    for {set x 0} {$x <= [string length $string]} {incr x} {
    sleep 150
    $::SRw.outerframe.textbox insert end [string index $string $x]
    }
    for {set x 0} {$x <= [string length $string]} {incr x} {
    sleep 150
    $::SRw.outerframe.label configure -text [string range $string 0 [expr [string length $string] -1]]
    }

    --
    Luc


    Or a bit more tclish:

    package require Tk
    pack [label .l] -fill x
    pack [text .t]

    set i 0
    set string "This is a slo mo text insertion test."
    foreach char [split $string {}] {
    after [incr i 150] [list .t insert end $char]
    }

    foreach char [split $string {}] {
    after [incr i 150] [format {
    .l configure -text "[.l cget -text]%s"
    } $char]
    }

    Regards

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)