代码之家  ›  专栏  ›  技术社区  ›  Gary

Tcl/Tk将事件绑定到小部件元素以及提供的关于事件的信息?

  •  0
  • Gary  · 技术社区  · 4 年前

    我对Tcl/Tk中提供的有关事件的信息感到有点困惑。

    在Tcl/Tk中,是否可以确定滚动条的哪个元素位于鼠标下方的某个位置 ButtonPress 事件,如箭头1或滑块?

    此外,是否可以将事件绑定到滚动条的特定元素,例如 v_scroll.arrow1

    我意识到滚动条已经内置了用于滚动的事件,但正在进行试验,以确定事件的总体工作方式和提供的信息。

    是否有可能确定发生任何鼠标事件的小部件或小部件元素,例如绑定到父窗口和查询启动事件的子窗口?

    看来Python已经成功了 event.widget

    我一直在阅读Ousterhout博士的书和文档,但不幸的是,我没能找到它。

    当然,我可以绑定到滚动条,并确定按下了哪个鼠标按钮,但无法确定滚动条的哪个元素当时在鼠标下。使用 winfo .v_scroll 只显示鼠标下的元素,而不显示鼠标下的元素。

    ttk::scrollbar .v_scroll -orient vertical -command ".canvas yview"
    bind .v_scroll <ButtonPress> { puts "Pressed button %b at [winfo containing %X %Y]" }
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   Donal Fellows    4 年前

    在Tcl/Tk中,是否可以确定鼠标下方的滚动条元素是按钮按下事件,如箭头1或滑块?

    这正是滚动条的功能 identify 方法的作用是:

    set what [$scrollbar identify $x $y]
    

    此外,是否可以将事件绑定到滚动条的特定元素,例如v_scroll.arrow1?

    不。事实上,自己将任何东西绑定到滚动条上通常不是一个好主意;类绑定可以满足您的需要,最好不要使用它们。滚动条滚动的小部件上的绑定更好。

    是否有可能确定发生任何鼠标事件的小部件或小部件元素,例如绑定到父窗口和查询启动事件的子窗口?

    对事件有其特殊性 %W 替代,即作为其目标的小部件(注意:仅限 canvas text widget确实允许子widget绑定),并且通常被交付到widget及其顶层(主要用于关键加速器)。通过调整传递小部件的属性,可以告诉其他小部件成为传递到小部件的事件的目标 bindtags bindtags 二者都 大局 你想做什么的细节。

    winfo containing 在事件绑定中,以发现特定事件下的小部件 全球的 协调( %X %Y %x %y

    小部件子组件标识为 总是 一个由小部件决定的问题。按照惯例,这是一个由政府负责的问题 方法,但这只是惯例;画布和文本小部件使用不同的机制。并不是所有的小部件都有子组件;经典 button 例如,不要(但是 ttk::button 是的。通常,绑定脚本使用这种标识来决定下一步要做什么,而不在其他任何地方使用。

    总之,事件管理是复杂的。事实上,所有的并发症在某些情况下都是必要的,而且幕后还有很多事情要做。