【问题标题】:Block Tcl/Tk button from multiple clicks阻止多次单击 Tcl/Tk 按钮
【发布时间】:2014-02-07 16:39:09
【问题描述】:

我需要一个类似于 tcl/tk 8.6 下可用的“tk busy”的功能,即只接受第一次单击按钮,并忽略进一步的单击,直到调用命令的执行完成。 不幸的是,我必须使用 8.5.9...

我已经尝试绑定一个自定义 proc single_invoke,它查看在我调用的 proc 中设置为 1 的全局变量。这不起作用,因为显然事件已排队,因此在我的 proc 返回后将调用第二次单击(并且全局设置回 0...)

更新(按照答案中的解决方案)

proc on_button_click {} {
  grab .lExistingLabel
  #lengthy code
  update;  #to release any queued events
  grab release .lExistingLabel
}

谢谢!

【问题讨论】:

  • 请贴一些代码

标签: tcl tk


【解决方案1】:

创建一个几乎不可见的小部件(例如 1x1 框架)并将其放置在不显眼的地方,例如应用的一角。当您单击按钮时,请抓住该小部件。抓取会将所有事件汇集到该小部件,直到您释放抓取。

【讨论】:

  • 作为一种改进,还可以将小部件place 关闭在它总是被剪裁的位置或另一个小部件下方。不过,它必须是现有的托管小部件;如果您不管理frame,它将无法正常工作(对于接收器来说,这是一个不错的选择,因为它没有让您感到惊讶的默认行为)。
猜你喜欢
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
相关资源
最近更新 更多