Как установить "фокус" дочернего окна над главным?

Пишу программу для работы с БД. Есть два класса: класс главного окна, с кнопкой открытия дочернего окна, и класс дочернего окна с остальным функционалом. Нужно сделать так, чтобы я мог взаимодействовать с главным окном после отработки дочернего окна. Т.е не мог закрыть главное окно, нажимать на его кнопки и т.д, пока открыто дочернее окно. Читал про .grab_set() .focus_set() и .wait_window() но принципа их взаимодействия с классами так и не понял. Заранее спасибо за ответы

from tkinter import *
from tkinter import messagebox
import psycopg2

is_conn = False
#Entry только чисел
class Lotfi(Entry):
    def __init__(self, master=None, **kwargs):
        self.var = StringVar()
        Entry.__init__(self, master, textvariable=self.var, **kwargs)
        self.old_value = ''
        self.var.trace('w', self.check)
        self.get, self.set = self.var.get, self.var.set
 
    def check(self, *args):
        if self.get().isdigit():
            # the current value is only digits; allow this
            self.old_value = self.get()
        else:
            # there's non-digit characters in the input; reject this
            self.set(self.old_value)


class main:
    def __init__(self, master):
        self.master = master
        self.master.title('Программа')
        self.master.geometry('550x550+300+225')
        self.master.resizable(True, False)
        self.connection_button = Button(self.master, text='Подключение', command=lambda: child(self.master))
        self.connection_button.grid(row=0, column=0, stick='we')
 
        self.master.mainloop()
 
 

class child:
    def __init__(self, master):
        self.slave = Toplevel(master)
        self.slave.title('Подключение к БД')
        self.slave.geometry('250x250+300+225')
        self.slave.resizable(False, False)
 
        self.host_label = Label(self.slave, text='Host').grid(row=0, column=0, stick='w')
        self.database_label = Label(self.slave, text='Database').grid(row=1, column=0, stick='w')
        self.user_label = Label(self.slave, text='User').grid(row=2, column=0, stick='w')
        self.password_label = Label(self.slave, text='Password').grid(row=3, column=0, stick='w')
        self.port_label = Label(self.slave, text='Port').grid(row=4, column=0, stick='w')
 
        self.host_en = Entry(self.slave, width=30)
        self.host_en.grid(row=0, column=1)
        self.database_en = Entry(self.slave, width=30)
        self.database_en.grid(row=1, column=1)
        self.user_en = Entry(self.slave, width=30)
        self.user_en.grid(row=2, column=1)
        self.password_en = Entry(self.slave, width=30, show='*')
        self.password_en.grid(row=3, column=1)
        self.port_en = Lotfi(self.slave, width=30)
        self.port_en.grid(row=4, column=1)
        self.bnt_conn = Button(self.slave, text='Подключение', command=self.connection_to_db).grid(row=5, column=0, columnspan=2,
                                                                                   pady=10)
    def connection_to_db(self):
        global is_conn
        try:
            conn = psycopg2.connect(
                host=f"{self.host_en.get()}",
                database=f"{self.database_en.get()}",
                user=f"{self.user_en.get()}",
                password=f"{self.password_en.get()}",
                port=f"{int(self.port_en.get())}",
            )
            is_conn = True
            c = conn.cursor()
            if is_conn:
                messagebox.showinfo(title='Успешно', message='Успешное подключение к БД')
 
        except psycopg2.OperationalError:
            messagebox.showerror(title='Ошибка', message=f'{psycopg2.OperationalError}')
 
        self.host_en.delete(0, END)
        self.database_en.delete(0, END)
        self.user_en.delete(0, END)
        self.password_en.delete(0, END)
        self.port_en.delete(0, END)
        if is_conn:
            self.slave.destroy()
 
 

root = Tk()
main(root)

Ответы (0 шт):