首页 > 解决方案 > 如何在 tkinter 中链接多个窗口的焦点?

问题描述

蟒蛇 3.8.2

目标:将多个窗口(root 和 topLevels)链接在一起,因此如果单击其中一个窗口(具有焦点),所有 topLevels 和 root 都会出现在桌面上不相关的窗口前面,换句话说,它们都有焦点但不是真的

我有点完成了这一点,但只有根,因为如果我包括其他 2 个顶层来做同样的事情,它就会陷入循环。即使如此,现在程序也不能专注于主根,并且每次根有焦点时,它都会传递到顶层之一。

为此,我编写了 2 个函数并将 focusIn 和 focusOut 绑定到这些函数函数:

def Focus(event):
    global rootNoFocus
    global rpwNoFocus
    global cswNoFocus
    print(rootNoFocus, rpwNoFocus, cswNoFocus)
    if rootNoFocus == True and rootNoFocus == True and rootNoFocus == True:
        rndPassWin.focus()
        clickerSetupWin.focus()
    
    if event.widget == root:
        rootNoFocus = False
    if event.widget == rndPassWin:
        rpwNoFocus = False
    if event.widget == clickerSetupWin:
        cswNoFocus = False
        
               
def noFocus(event):
    global rootNoFocus
    global rpwNoFocus
    global cswNoFocus
    
    if event.widget == root:
        rootNoFocus = True
    if event.widget == rndPassWin:
        rpwNoFocus = True
    if event.widget == clickerSetupWin:
        cswNoFocus = True

捆绑:

root.bind('<FocusIn>', Focus)
root.bind('<FocusOut>', noFocus)
rndPassWin.bind('<FocusOut>', noFocus)
clickerSetupWin.bind('<FocusOut>', noFocus)

标签: pythontkintertoplevel

解决方案


推荐阅读