Это действительно зависит от вашего выбора и ощущения. Я дам вам два метода и позволю вам решить.
Отказ от ответственности: Я предпочитаю первый метод.
Не рекомендуется создавать два Tk()
окна в одной программе. Что вы можете сделать, так это иметь одно главное окно и настраивать его как и когда хотите. Вот, например, функция clear_widgets()
очищает страницу входа и показывает следующую страницу.
import tkinter as tk
import tkinter.messagebox as tm
class adminlog(tk.Tk):
def __init__(self):
super().__init__()
tk.Label(self, text="Username").grid(row=0, sticky="e")
tk.Label(self, text="Password").grid(row=1, sticky="e")
self.entry_username = tk.Entry(self)
self.entry_password = tk.Entry(self, show="*")
self.entry_username.grid(row=0, column=1)
self.entry_password.grid(row=1, column=1)
logbtn = tk.Button(self, text="Login as Admin", command=self.lg_admin)
logbtn.grid(columnspan=2)
def adminpage(self):
self.clear_widgets()
tk.Label(self, text='Hello Admin !!', bg='brown', fg='white').grid(row=0, column=1, padx=20, pady=20)
def clear_widgets(self):
for widget in self.winfo_children():
widget.destroy()
def lg_admin(self):
un = self.entry_username.get()
ps = self.entry_password.get()
if un == "admin" and ps == "pito":
tm.showinfo("Login Info", "Login Successfully")
self.adminpage()
else:
tm.showerror("Login Error", "Incorrect password or username")
adminlog().mainloop()

Если вы действительно хотите другое окно и не можете обойтись без него, вы должны использовать Toplevel
. Вот демонстрация.
import tkinter as tk
import tkinter.messagebox as tm
class adminlog(tk.Tk):
def __init__(self):
super().__init__()
tk.Label(self, text="Username").grid(row=0, sticky="e")
tk.Label(self, text="Password").grid(row=1, sticky="e")
self.entry_username = tk.Entry(self)
self.entry_password = tk.Entry(self, show="*")
self.entry_username.grid(row=0, column=1)
self.entry_password.grid(row=1, column=1)
logbtn = tk.Button(self, text="Login as Admin", command=self.lg_admin)
logbtn.grid(columnspan=2)
def adminpage(self):
adp = tk.Toplevel(self)
tk.Label(adp, text='Hello Admin !!', bg='brown', fg='white').grid(row=0, column=1, padx=20, pady=20)
def lg_admin(self):
un = self.entry_username.get()
ps = self.entry_password.get()
if un == "admin" and ps == "pito":
tm.showinfo("Login Info", "Login Successfully")
self.adminpage()
else:
tm.showerror("Login Error", "Incorrect password or username")
adminlog().mainloop()

Здесь вы можете видеть, что окно входа в систему не исчезнет (если это произойдет, оно также возьмет с собой Toplevel
). Поэтому я бы порекомендовал вам использовать первый метод.