我有一个条目小部件,其回调绑定到<Key>
每当用户在条目小部件中键入内容然后回调
映射到<Key>
被调用。回调获取插入到条目小部件中的文本,然后尝试查找标题与文本匹配的Notebook选项卡。如果匹配则调用Notebook.select
方法。当调用Notebook.select
方法时,选择选项卡并使其子窗口小部件之一得到关注。这种行为不是我想要的,我需要输入小部件来保持焦点。当回调调用Notebook.select
时,它基本上失去了焦点。我在条目小部件中使用了grab_set()
但是在调用方法笔记本选择时它不会避免失去焦点。
答案 0 :(得分:0)
此行为可能取决于平台。当我在我的机器上选择一个选项卡时,焦点将保留在条目小部件中。但是,如果您的平台更改焦点,您可以轻松地从回调中重新设置焦点。
这是一个有效的例子。运行代码,当您键入选项卡的名称(例如:&#34; two&#34;)时,将选中该选项卡,但焦点应保留在条目小部件中:
entry .e
ttk::notebook .nb
pack .e -side top -fill x
pack .nb -side top -fill both -expand 1
foreach text {"One" "Two" "Three" "Four"} {
set frame_name ".nb.page_$text"
frame $frame_name
.nb add $frame_name -text $text
label $frame_name.label -text "This is page $text"
pack $frame_name.label -padx 20 -pady 20
}
bind .e <KeyRelease> callback
proc callback {} {
set input [string tolower [.e get]]
foreach child [winfo children .nb] {
set text [string tolower [.nb tab $child -text]]
if {$text eq $input} {
.nb select $child
focus .e
}
}
}