我在 Tcl/Tk 8.6.11 中遇到了 MenuSelect 事件的问题(在 Linux、Debian 10.7 中尝试过)。
事实上,它根本不会触发主菜单和可撕下的菜单。尽管在 Tcl/Tk 8.6.9 甚至在 8.6.11 中都可以正常工作——只是在菜单没有被撕掉的情况下。
一个测试代码:
package require Tk
proc ::somehandler {w wt} {
puts "Step [incr ::step]: $w / $wt, index=[$wt index active]"
}
set w [menu .m -tearoff 1]
$w add command -label {Item 1}
$w add command -label {Item 2}
bind $w <<MenuSelect>> [list ::somehandler $w %W]
pack [button .b -text "Click me" \
-command {tk_popup .m [winfo pointerx .] [winfo pointery .]}]
我尝试了以下(虽然是愚蠢的)替换:
event delete <<MenuSelect>>
event add <<MenuSelect>> <Motion>
bind $w <<MenuSelect>> [list ::somehandler $w %W]
......结果相同。
看起来,它与 Tk 中处理的菜单路径有关,有点棘手,如上例所示。
我懒得在从 8.6.9 切换到 8.6.11/12、8.7 等时更改标准代码。
TIA 的任何提示。