【问题标题】:Tcl / Tk binding won't be executedTcl / Tk 绑定不会被执行
【发布时间】:2022-12-09 14:30:24
【问题描述】:

我刚开始学习 tcl,我使用 python 的 tkinter 解释器可能是相关的。但据我所知,它应该是一样的。

但是,我使用的代码与tcler's wiki 中的代码几乎相同,但从未执行过有界过程。顶层已创建并响应,但移动或调整解析为 $win 的窗口不会触发 <Configure> 事件。它不会因错误而失败,只是永远不会调用该过程。可能是显而易见的事情,但我就是看不到。

namespace eval MyTk {
    variable TracedWindows {}
    proc StickTo {win w h x y} {
        wm geometry $win.sub $wx$h+$x+$y
    }
    proc TraceWindow {win {value true}} {
        set name $win
        if {$win == "."} {set name ""}
        if {$value && $win ni $MyTk::TracedWindows} {
            toplevel $name.sub
            bind $win <Configure> {$MyTk::StickTo %W %w %h %X %Y}
        }
    }
}

更新,以下作品。所以它与我的命名空间或我如何处理它有关:

bind $win <Configure> {bell}

【问题讨论】:

  • 试试这个:bind $win &lt;Configure&gt; [list MyTk::StickTo %W %w %h %X %Y]
  • @Mkn 不幸的是它不起作用,我已经用花括号尝试过类似的东西。

标签: tcl tk-toolkit


【解决方案1】:

基本上我发现如果你失败了,不管出于什么原因,在你的有界过程中你不会得到错误,它只是不起作用。来自 python 这有点令人惊讶,但现在我知道了,我可以处理它。

我用了这段代码顺便说一句:

bind $win <Configure> {::MyTk::StickTo %W}

和:

proc StickTo {widget} {
    set name $widget
    if {$widget == "."} {set name ""}
    wm geometry $name.sub [wm geometry $widget]

我在 proc 中使用了命令 bell 并逐行添加以使其工作。看起来需要更加小心地编写 tcl 代码。

【讨论】:

    猜你喜欢
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多