Как активировать окно tkinter после уничтожения предыдущего? - PullRequest
1 голос
/ 16 июня 2019

Мне нужно, чтобы следующее окно tkinter стало активным автоматически после уничтожения предыдущего.

Я работаю с Python 3 в Windows 10.

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() не увенчались успехом.

1 Ответ

0 голосов
/ 17 июня 2019

В моей системе второе окно фокусируется без изменения вашего кода, поэтому трудно сказать. Возможно, вы могли бы использовать root.focus_force() до вызова root.mainloop()

Кроме того, вы можете создавать разные окна из одного корня, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...