【问题标题】:How to activate tkinter window after destroying the previously one?销毁前一个窗口后如何激活 tkinter 窗口?
【发布时间】:2019-06-16 10:28:50
【问题描述】:

我需要下一个tkinter 窗口在销毁前一个窗口后自动变为活动状态。

我正在与 Windows 10 中的 Python 3 合作。

import sys
from tkinter import *

#Green button pressed
def passed():
    fails='0'
    with open("ButtonPressed.txt",'w')as TestResult:
        TestResult.write(fails)
    TestResult.close()
    root.destroy()

#Red button pressed
def failed():
    fails='1'
    with open("ButtonPressed.txt",'w')as TestResult:
        TestResult.write(fails)
    TestResult.close()
    root.destroy()

#First window
def PushHold(UUT):
    global root
    root = Tk()   
    root.bind('<Return>', lambda q:passed())
    TitleText="Push Button test"
    root.title(TitleText)
    root.geometry("460x160")
    frame = Frame(root)
    frame.pack()
    bottomframe = Frame(root)
    bottomframe.pack( side = BOTTOM )

    LABLE_TEXT = "Push and hold S1 on "+ UUT+" board.\n Click OK."
    label = Label( frame, text=LABLE_TEXT)
    label.config(font=("Arial", 22))
    label.pack( side = TOP)

    greenbutton = Button(frame, text="OK", bg="Green", fg="White", height=2 , width = 10 , command=lambda: passed())
    greenbutton.config(font=("Arial", 18))
    greenbutton.pack( side = LEFT, padx=140)
    root.mainloop()

#Second window
def Release(UUT):
    global root
    root = Tk()
    root.bind('<Return>', lambda q:passed())
    TitleText="Release Button test"
    root.title(TitleText)
    root.geometry("460x160")
    frame = Frame(root)
    frame.pack()
    bottomframe = Frame(root)
    bottomframe.pack( side = BOTTOM )

    LABLE_TEXT = "Release S1 on "+ UUT+" board.\n Click OK."
    label = Label( frame, text=LABLE_TEXT)
    label.config(font=("Arial", 22))
    label.pack( side = TOP)

    greenbutton = Button(frame, text="OK", bg="Green", fg="White", height=2 , width = 10 , command=lambda: passed())
    greenbutton.config(font=("Arial", 18))
    greenbutton.pack( side = LEFT, padx=140)
    root.mainloop()

#read results of the first window
def PushButton(UUT):
    PushHold(UUT)
    with open("ButtonPressed.txt",'r') as TestResult:
        str = list(TestResult)
        fails = int(str[0]) 
    TestResult.close()
    return fails

#read results of the second window
def ReleaseButton(UUT):
    Release(UUT)
    with open("ButtonPressed.txt",'r') as TestResult:
        str = list(TestResult)
        fails = int(str[0]) 
    TestResult.close()
    return fails

PushButton('UUT1')    #first window calling
ReleaseButton('UUT1')    #second window calling

第一个窗口运行良好,第二个窗口出现,但未激活。在按下按钮之前需要点击它来激活。

尝试使用root.withdraw()root.lift() 没有成功。

【问题讨论】:

    标签: python-3.x tkinter


    【解决方案1】:

    在我的系统上,第二个窗口无需更改代码即可获得焦点,因此很难判断。在调用 root.mainloop() 之前,您可能可以使用 root.focus_force()

    或者,您可以使用 tk.Toplevel 从同一根目录生成不同的窗口。

    import sys
    from tkinter import *
    
    #Green button pressed
    def passed():
        fails='0'
        with open("ButtonPressed.txt",'w')as TestResult:
            TestResult.write(fails)
        TestResult.close()
        root.destroy()
    
    #Red button pressed
    def failed():
        fails='1'
        with open("ButtonPressed.txt",'w')as TestResult:
            TestResult.write(fails)
        TestResult.close()
        root.destroy()
    
    #First window
    def PushHold(UUT):
        global root
        root = Tk()   
        root.bind('<Return>', lambda q:passed())
        TitleText="Push Button test"
        root.title(TitleText)
        root.geometry("460x160")
        frame = Frame(root)
        frame.pack()
        bottomframe = Frame(root)
        bottomframe.pack( side = BOTTOM )
    
        LABLE_TEXT = "Push and hold S1 on "+ UUT+" board.\n Click OK."
        label = Label( frame, text=LABLE_TEXT)
        label.config(font=("Arial", 22))
        label.pack( side = TOP)
    
        greenbutton = Button(frame, text="OK", bg="Green", fg="White", height=2 , width = 10 , command=lambda: passed())
        greenbutton.config(font=("Arial", 18))
        greenbutton.pack( side = LEFT, padx=140)
        root.focus_force()         #<-------------- Here ---------------------
        root.mainloop()
    
    #Second window
    def Release(UUT):
        global root
        root = Tk()
        root.bind('<Return>', lambda q:passed())
        TitleText="Release Button test"
        root.title(TitleText)
        root.geometry("460x160")
        frame = Frame(root)
        frame.pack()
        bottomframe = Frame(root)
        bottomframe.pack( side = BOTTOM )
    
        LABLE_TEXT = "Release S1 on "+ UUT+" board.\n Click OK."
        label = Label( frame, text=LABLE_TEXT)
        label.config(font=("Arial", 22))
        label.pack( side = TOP)
    
        greenbutton = Button(frame, text="OK", bg="Green", fg="White", height=2 , width = 10 , command=lambda: passed())
        greenbutton.config(font=("Arial", 18))
        greenbutton.pack( side = LEFT, padx=140)
        root.focus_force()         #<-------------- Here ---------------------
        root.mainloop()
    
    #read results of the first window
    def PushButton(UUT):
        PushHold(UUT)
        with open("ButtonPressed.txt",'r') as TestResult:
            str = list(TestResult)
            fails = int(str[0]) 
        TestResult.close()
        return fails
    
    #read results of the second window
    def ReleaseButton(UUT):
        Release(UUT)
        with open("ButtonPressed.txt",'r') as TestResult:
            str = list(TestResult)
            fails = int(str[0]) 
        TestResult.close()
        return fails
    
    PushButton('UUT1')    #first window calling
    ReleaseButton('UUT1')    #second window calling
    
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多