首页 文章

当从回调中选择笔记本选项卡时,如何避免tkinter条目窗口小部件失去焦点

提问于
浏览
0

我有一个条目小部件,当用户在条目小部件中键入内容然后调用映射到 <Key> 的回调时,该小部件具有绑定到 <Key> 的回调 . 回调获取插入到条目小部件中的文本,然后尝试查找 Headers 与文本匹配的Notebook选项卡 . 如果匹配则调用 Notebook.select 方法 . 当调用 Notebook.select 方法时,选择选项卡并使其子窗口小部件之一得到关注 . 这种行为不是我想要的,我需要输入小部件来保持焦点 . 当回调调用 Notebook.select 时,它基本上正在失去焦点 . 我在条目小部件中使用了 grab_set() ,但它不会避免在调用方法笔记本选择时失去焦点 .

1 回答

  • 0

    此行为可能取决于平台 . 当我在我的机器上选择一个选项卡时,焦点将保留在条目小部件中 . 但是,如果您的平台更改焦点,您可以轻松地从回调中设置焦点 .

    这是一个有效的例子 . 运行代码,当您键入选项卡的名称(例如:“two”)时,将选中该选项卡,但焦点应保留在条目窗口小部件中:

    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
            }
        }
    }
    

相关问题