Python 当从回调中选择笔记本选项卡时,如何避免tkinter条目小部件失去焦点
我有一个条目小部件,它的回调绑定到Python 当从回调中选择笔记本选项卡时,如何避免tkinter条目小部件失去焦点,python,tkinter,tcl,tk,Python,Tkinter,Tcl,Tk,我有一个条目小部件,它的回调绑定到 每当用户在entry小部件中键入某个内容时,回调 调用映射到。回调获取插入到条目小部件中的文本,然后尝试查找标题与文本匹配的笔记本选项卡。如果匹配,则调用笔记本。选择方法。当调用Notebook.select方法时,选项卡被选中,其一个子小部件被聚焦。这种行为不是我想要的,我需要入口小部件来保持焦点。当回调调用笔记本时,它基本上失去了焦点。选择。我在entry小部件中使用了grab\u set(),但它不能避免在调用方法notebook select时失去焦点
每当用户在entry小部件中键入某个内容时,回调
调用映射到
。回调获取插入到条目小部件中的文本,然后尝试查找标题与文本匹配的笔记本选项卡。如果匹配,则调用笔记本。选择方法。当调用Notebook.select
方法时,选项卡被选中,其一个子小部件被聚焦。这种行为不是我想要的,我需要入口小部件来保持焦点。当回调调用笔记本时,它基本上失去了焦点。选择。我在entry小部件中使用了grab\u set()
,但它不能避免在调用方法notebook select时失去焦点。此行为可能取决于平台。当我在我的机器上选择一个选项卡时,焦点停留在条目小部件上。但是,如果您的平台更改了焦点,您可以轻松地从回调中设置回焦点
这里有一个有效的例子。运行代码,当您键入一个选项卡的名称(例如:“两个”)时,该选项卡将被选中,但焦点应保留在条目小部件中:
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
}
}
}
entry.e
ttk::notebook.nb
包装。e侧顶部-填充x
包装编号-侧面顶部-两侧填充-展开1
每个文本{“一”“二”“三”“四”}{
设置框架名称“.nb.page\uu$text”
帧$frame\u名称
.nb添加$frame_name-text$text
label$frame_name.label-text“这是第$text页”
包装$frame_name.label-padx 20-pady 20
}
bind.e回调
进程回调{}{
设置输入[string tolower[.e get]]
foreach child[winfo children.nb]{
设置文本[string tolower[.nb tab$child-text]]
如果{$text eq$input}{
.nb选择$child
聚焦
}
}
}
您是否尝试过回调结束时的.focus\u set()
输入方法小部件?请阅读