Thread from comp.lang.tcl (3 replies)

How to do callbacks to methods
Posted by Mark Summerfield <mark@qtrac.eu> 2 months 3 weeks ago

In the app below none of the callbacks works, neither in the bind calls 
nor the -command. I am using Tcl/Tk 9.0b2 on Linux. How can I make these 
callbacks work?

#!/usr/bin/env wish9
tk appname "Test App"
oo::class create App {
    constructor {} {
        wm withdraw .
        wm title . [tk appname]
        grid [ttk::button .quitButton -text Quit -underline 0 \
              -command {my on_quit}]
        bind <Escape> {my on_quit}
        bind <Alt-q> {my on_quit}
    }
    method on_quit {} {
        destroy .
    }
    method show {} {
        wm deiconify .
        raise .
    }
}
set application [App new]
$application show

Click on article to view all threads in comp.lang.tcl
Re: How to do callbacks to methods
Posted by Mark Summerfield <mark@qtrac.eu> 2 months 3 weeks ago

Sorry for the noise, I found the solution on the wiki:

#!/usr/bin/env wish9
proc ::oo::Helpers::callback {method args} {
    list [uplevel 1 {namespace which my}] $method {*}$args
}
tk appname "Test App"
oo::class create App {
    constructor {} {
        wm withdraw .
        wm title . [tk appname]
        grid [ttk::button .quitButton -text Quit -underline 0 \
              -command [callback on_quit]]
        bind . <Escape> [callback on_quit]
        bind . <Alt-q> [callback on_quit]
    }
    method on_quit {} {
        destroy .
    }
    method show {} {
        wm deiconify .
        raise .
    }
}
set application [App new]
$application show

Click on article to view all threads in comp.lang.tcl
Re: How to do callbacks to methods
Posted by greg <gregor.ebbing@gmx.de> 2 months 3 weeks ago

Am 11.07.24 um 09:44 schrieb Mark Summerfield:
> In the app below none of the callbacks works, neither in the bind calls
> nor the -command. I am using Tcl/Tk 9.0b2 on Linux. How can I make these
> callbacks work?
> 
> #!/usr/bin/env wish9
> tk appname "Test App"
> oo::class create App {
>      constructor {} {
>          wm withdraw .
>          wm title . [tk appname]
>          grid [ttk::button .quitButton -text Quit -underline 0 \
>                -command {my on_quit}]
>          bind <Escape> {my on_quit}
>          bind <Alt-q> {my on_quit}
>      }
>      method on_quit {} {
>          destroy .
>      }
>      method show {} {
>          wm deiconify .
>          raise .
>      }
> }
> set application [App new]
> $application show

Hello,
solution: callback
https://www.tcl.tk/man/tcl9.0/TclCmd/callback.html



package   require Tk

# helpers proc for 8.6
#proc ::oo::Helpers::callback {method args} {
#    list [uplevel 1 {namespace which my}] $method {*}$args
#}

#https://www.tcl.tk/man/tcl9.0/TclCmd/callback.html

tk appname "Test App"
oo::class create App {
     constructor {} {
         wm withdraw .
         wm title . [tk appname]
         grid [ttk::button .quitButton -text Quit -underline 0 \
               -command [callback on_quit]]
         bind <Escape> [callback on_quit]
         bind <Alt-q> [callback on_quit]
     }
     method on_quit {} {
         destroy .
     }
     method show {} {
         wm deiconify .
         raise .
     }
}
set application [App new]
$application show

Click on article to view all threads in comp.lang.tcl
Re: How to do callbacks to methods
Posted by Mark Summerfield <mark@qtrac.eu> 2 months 3 weeks ago

Thank you!

Click on article to view all threads in comp.lang.tcl