【问题标题】:Tcl/tk Button - How I can pass a variable on the command option?Tcl/tk 按钮 - 如何在命令选项上传递变量?
【发布时间】:2013-01-22 19:06:52
【问题描述】:

我在命令选项上传递变量时遇到问题,例如:

package require Tk
wm withdraw .
destroy .button
toplevel .button

# button.0: puts 0
set count 0
button .button.$count -text $count -command {puts $count}
grid .button.$count -column $count -row 0

# button.1: puts 1
incr count
button .button.$count -text $count -command {puts $count}
grid .button.$count -column $count -row 0

但是 button.0 将 1 而不是 0。似乎在调用 button.0 时,它采用了当时变量的值,即 1。

我发现我可以使用过程和全局变量来实现所需的结果,但我想知道是否可以在不诉诸过程调用的情况下实现这一目标。

提前谢谢你。

【问题讨论】:

  • 请注意,对于任何真正复杂的事情,添加过程调用实际上可以简化事情。

标签: variables button tcl tk


【解决方案1】:

如果要在定义回调时替换变量的当前值,则需要使用不同的引用机制:

button .button.$count -text $count -command [list puts $count]

【讨论】:

    【解决方案2】:

    使用您的代码创建 2 个触发命令的按钮:

    puts $count
    

    在您的示例中,当您按下按钮时,变量 $count 等于“1”,因此“放置”并显示该值。为了正确操作需要创建2个按钮。第一个按钮命令应该是“puts 0”。第二个按钮命令应该是“puts 1”。我们必须在创建按钮时应用替换。例如:

    -command [list puts $count]
    -command "puts $count"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-13
      • 2019-09-11
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      • 2012-10-18
      • 2023-03-23
      • 2015-02-15
      相关资源
      最近更新 更多