首页 > 解决方案 > tk2combobox:如何控制对向上/向下箭头键的响应

问题描述

我在 R 中有一个使用 tk2combobox 的 UI。

如果控件具有焦点,并且我按下“向下箭头”键,它会展开列表,而不是更改选择。它实际上并没有改变选择,直到我向下箭头并点击“输入”或用鼠标单击。

有什么方法可以让它立即使用箭头键更改选择?

标签: rtk

解决方案


这就是你在 Tcl 中的做法。我无法让第一个按键起作用,因为绑定中的交互以某种方式导致第二个按键消失。

package require Tk

proc ::lbarrowhandler { w } {
  set currselidx [$w curselection]
  regsub {\.popdown\.f\.l$} $w {} cb
  $cb current $currselidx
  return -code ok
}

set ::x cc
ttk::combobox .c -values {aa bb cc dd ee ff} -textvariable ::x
pack .c

bind ComboboxListbox <<ListboxSelect>> +[list ::lbarrowhandler %W]

编辑:

另一种可能性是将 ttk::spinbox 与 -values 选项一起使用。我不知道您的确切用例,但这将为用户提供有限的值选择。这里的缺点是完整的列表是不可见的。

set ::x cc
ttk::spinbox .sp -values {aa bb cc dd ee ff} -state readonly \
     -wrap true -textvariable ::x
pack .sp

-state readonly 阻止用户输入任何内容,而 -wrap 选项将使箭头控件从头到尾环绕,反之亦然。

参考资料:http ://www.tcl-lang.org/man/tcl/TkCmd/ttk_spinbox.htm


推荐阅读