如何在脚本启动时调用Tcl过程

huangapple go评论57阅读模式
英文:

How to invoke Tcl procedure at script start

问题

我有一个tcl脚本,其中有toplevel“.”和一个按钮。
是否可以将这个toplevel“.”放在一个过程中,当我启动我的脚本时,该过程将被调用?
例如:

菜单
proc 菜单 { } {
    wm title . "菜单"
    ttk::button .b -width 30 -text 关闭 -command {exit}
    grid configure .b -row 0 -column 0 -sticky nw -padx 10 -pady 10 
}

我得到了“invalid command name “Menu” (error)”错误。

英文:

I have a tcl script, that has the toplevel "." with a button.
It is possible to put this toplevel . inside a procedure, and when i start my script, the procedure will be invoked?
Exemp:

Menu
proc Menu { } {
	wm title . "Menu"
	ttk::button .b -width 30 -text close -command {exit}
	grid configure .b -row 0 -column 0 -sticky nw -padx 10 -pady 10 
}

I'm getting "invalid command name "Menu" (error)".

答案1

得分: 1

Tcl按照您指定的顺序运行命令。将对 proc Menu 的调用放在对 Menu 的调用之后以执行它。

而且,如果它是一次性命令,请使用应用的 lambda,这样您就不会污染您的命名空间,也不必使用 rename 进行操作:

apply {{} {
    # 所有您可能需要的本地变量都在这里
    wm title . "菜单"
    set btn [ttk::button .b -width 30 -text close -command {exit}]
    grid configure $btn -row 0 -column 0 -sticky nw -padx 10 -pady 10 
}}
英文:

Tcl literally runs commands in the order you specify. Put the call to Menu after the call to proc Menu to make it.

And if it is a one-shot command, use an applied lambda so you don't pollute your namespace or have to use hacks with rename:

apply {{} {
    # All the local variables you could ever want are in here
    wm title . "Menu"
    set btn [ttk::button .b -width 30 -text close -command {exit}]
    grid configure $btn -row 0 -column 0 -sticky nw -padx 10 -pady 10 
}}

huangapple
  • 本文由 发表于 2023年5月24日 22:54:52
  • 转载请务必保留本文链接:https://go.coder-hub.com/76324856.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定