Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当从回调中选择笔记本选项卡时,如何避免tkinter条目小部件失去焦点_Python_Tkinter_Tcl_Tk - Fatal编程技术网

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()
输入方法小部件?请阅读